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

自分自身を再帰的に呼び出すmysqlストアドプロシージャ

    mysqlバージョン>=5

    でのみ機能します

    ストアドプロシージャの宣言はこれです

    あなたはそれを少し改善することができますが、これは機能しています:

    DELIMITER $$
    
    CREATE PROCEDURE calctotal(
       IN number INT,
       OUT total INT
    )
    
    BEGIN
    
       DECLARE parent_ID INT DEFAULT NULL ;
       DECLARE tmptotal INT DEFAULT 0;
       DECLARE tmptotal2 INT DEFAULT 0;
    
       SELECT parentid   FROM test   WHERE id = number INTO parent_ID;   
       SELECT quantity   FROM test   WHERE id = number INTO tmptotal;     
    
       IF parent_ID IS NULL
        THEN
        SET total = tmptotal;
       ELSE     
        CALL calctotal(parent_ID, tmptotal2);
        SET total = tmptotal2 * tmptotal;   
       END IF;
    
    END$$
    
    DELIMITER ;
    

    呼び出しは次のようになります(この変数を設定することが重要です):

    SET @@GLOBAL.max_sp_recursion_depth = 255;
    SET @@session.max_sp_recursion_depth = 255; 
    
    CALL calctotal(6, @total);
    SELECT @total;
    


    1. SQLiteがjournal_mode=WALまたはjournal_mode=DELETEを使用しているかどうかを確認する関数

    2. postgresql関数を使用して異なるテーブル名からデータをフェッチしたい

    3. MySQLでグループ化されたランキングを実行する方法

    4. データベースをアップグレードするときに楽しむ5つの利点