sql >> データベース >  >> RDS >> Mysql

Knexrawを使用してMySQLでストアドプロシージャを作成する方法

    これは役立つはずです。ここでは、knex-migrateが期待するモジュールを作成しました。ニーズに適応するのに問題はないはずです。

    const mysql = require('mysql2');
    
    const {
      database: {
        connection: {
          host, user, password, database, port
        }
      }
    } = require('./settings.js');
    
    exports.up = async () => {
      const script = `
        CREATE DEFINER=\`<YOUR_DB_USER>\`@\`%\` PROCEDURE \`fill_date_dimension\`(IN startdate DATE,IN stopdate DATE)
        BEGIN
            DECLARE currentdate DATE;
            SET currentdate = startdate;
            WHILE currentdate < stopdate DO
            INSERT INTO time_dimension VALUES (
                            YEAR(currentdate)*10000+MONTH(currentdate)*100 + DAY(currentdate),
                            currentdate,
                            YEAR(currentdate),
                            MONTH(currentdate),
                            DAY(currentdate),
                            QUARTER(currentdate),
                            WEEKOFYEAR(currentdate),
                            DATE_FORMAT(currentdate,'%W'),
                            DATE_FORMAT(currentdate,'%M'),
                            'f',
                            CASE DAYOFWEEK(currentdate) WHEN 1 THEN 't' WHEN 7 then 't' ELSE 'f' END,
                            NULL);
            SET currentdate = ADDDATE(currentdate,INTERVAL 1 DAY);
            END WHILE;
        END`
    
      const connection = mysql.createConnection({
        host,
        user,
        database,
        password,
        port
      });
    
      return new Promise(function (resolve, reject) {
        connection.query(
          script,
          function (err) {
            if (err) {
              return reject(err);
            }
    
            return resolve();
          }
        );
      });
    };
    
    exports.down = async knex => knex.raw('DROP PROCEDURE IF EXISTS fill_date_dimension');
    


    1. 同じSQLステートメントで複数のテーブルから削除することは可能ですか?

    2. Oracleにレコードが存在するかどうかを確認する最も効率的な方法は何ですか?

    3. ストアドプロシージャ/関数はテーブルを返すことができますか?

    4. MySQLで行をフェッチするクエリを選択します