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

MySQL:ストアドプロシージャのIF/THENステートメント

    私が見る限り、いくつかの問題があります:

    1. Davidが指摘したように、すべてのステートメントは;で終了する必要があります。
    2. SELECTを実行する場合 、LIMIT 1を実行して、1つの値のみを選択できることを確認してください。; min()のような集計関数がある場合 そうすると、1つの値しか出てこなくなります。
    3. CREATE PROCEDURE ...を使用してプロシージャを作成する場合 構文、DELIMITER $$を設定することを忘れないでください CREATE PROCEDURE ... END $$の前 本文とDELIMITER ; 後。
    4. IF THEN ... END IF内に複数のステートメントがある場合 ブロック、BEGIN ... END;内に配置することをお勧めします ブロックします。
    5. ここのエージェンシーのように戻り値がある場合は、それをFUNCTION name (arg1: INTEGER) RETURNS INTEGERにしてみませんか。 PROCEDURE name (IN arg1 INTEGER, OUT agency INTEGER) 。この機能ははるかに用途が広いです。
    DELIMITER $$
    
    CREATE PROCEDURE name(arg1 INTEGER, arg2 INTEGER, ...)
    BEGIN
    
      SELECT SET agency = 
        COALESCE((SELECT org_agency_o_id 
                FROM orgs_agencies 
                WHERE org_agency_code = maj_agency_cat) LIMIT 1,
        (SELECT min(org_id) FROM orgs     
        WHERE org_name LIKE CONCAT('U.S.',SUBSTRING(maj_agency_cat,5)))); 
    
      IF agency IS NULL THEN BEGIN
        -- execute multiple queries   
        INSERT INTO orgs (org_name
                         ,org_name_length
                         ,org_type
                         ,org_sub_types) 
        VALUES (CONCAT('U.S. ',SUBSTRING(maj_agency_cat,5))
               ,LENGTH(CONCAT('U.S. ',SUBSTRING(maj_agency_cat,5)))
               ,'org','Org,GovernmentEntity,Federal,Agency');
    
        SET agency = LAST_INSERT_ID();
      END; END IF;
    END $$
    
    DELIMITER ;
    


    1. ペルシア語\アラビア語のテキストをmysqlデータベースに保存する

    2. Android Roomを使用して2つ以上の外部キーを持つテーブルを作成するにはどうすればよいですか?

    3. PythonMatplotlibとMySQLおよびGinput

    4. 原因:java.sql.SQLException:ORA-01795:リスト内の式の最大数は1000ですか?