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

プリペアドステートメント用のMySQLストアドプロシージャカーソル

    悪いニュースと良いニュースがあります。

    まず悪いニュース。

    したがって、これまでのところ動的カーソルはありません...ここではこのようなものが必要になります。

    しかし今、良いニュースです。それを回避する方法は少なくとも2つあります。vwまたはtblを使用することです。

    以下では、コードを書き直してビューを適用し、「動的」カーソルを作成しました。

    DELIMITER //
    
    DROP PROCEDURE IF EXISTS myproc;
    CREATE PROCEDURE myproc(IN lang VARCHAR(400))
    
    BEGIN
    
        DECLARE c VARCHAR(400);
        DECLARE done BOOLEAN DEFAULT FALSE;
        DECLARE cur CURSOR FOR SELECT name FROM vw_myproc;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    
        SET @select = concat('CREATE VIEW vw_myproc as SELECT * FROM ', lang, ' limit 3');
        PREPARE stm FROM @select;
        EXECUTE stm;
        DEALLOCATE PREPARE stm;
    
        SET @select = concat('SELECT * FROM ', lang, ' limit 3');
        PREPARE stm FROM @select;
        EXECUTE stm;
        DEALLOCATE PREPARE stm;
    
        SET @cnt = FOUND_ROWS(); 
        SELECT @cnt;
        IF @cnt = 3 THEN
              OPEN cur;
              read_loop: LOOP
                FETCH cur INTO c;
                IF done THEN
                  LEAVE read_loop;
                END IF;
    
                #HERE YOU CAN DO STH WITH EACH ROW e.g. UPDATE; INSERT; DELETE etc
                SELECT c;
    
              END LOOP read_loop;
              CLOSE cur;
              DROP VIEW vw_myproc;
        ELSE
            SET c = '';
        END IF;
    
    END//
    
    DELIMITER ;
    

    そして、手順をテストするには:

    CALL myproc('people_en');
    


    1. MySqlテーブル列の1つに一意のランダムな文字列を生成するにはどうすればよいですか?

    2. Oracleパーティションインデックス

    3. SQL Server Management StudioGUIによって返されるソースと同一のSQLServerストアドプロシージャソースをプログラムで取得しますか?

    4. データベース設計:在庫および販売システム?