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

存在する場合の使用方法-PL/SQLに存在しない場合は?

    コードはほとんど問題ありませんが、次のように変更する必要があります。

    DECLARE
    l_count NUMBER;
    l_count_2 NUMBER;
    BEGIN
    select count(*) into l_count from table_1 where name='NAME_1';
    IF l_count = 0  then
        BEGIN 
            select count(*) into l_count_2 FROM dba_tab_cols  WHERE TABLE_NAME = 'table_1' AND COLUMN_NAME='NAME_2';
    
            IF l_count_2 > 0 THEN        
              sql_cnt :=  'INSERT INTO table_1 (xycolumn1, xycolumn2, xycolumn3) VALUES (''value1'', ''select max(column) from table_2'', ''20'')';          
            ELSE             
               sql_cnt := 'INSERT INTO table_1 (xycolumn1, xycolumn2) VALUES (''value1'', ''select max(column) from table_2'')';
            END IF;                    
           BEGIN
             EXECUTE IMMEDIATE sql_cnt ;
           END;
        END;
    END IF;       
    END;      
    

    またはこのように:

    DECLARE
    l_count NUMBER;
    l_count_2 NUMBER;
    BEGIN
    select count(*) into l_count from table_1 where name='NAME_1';
    IF l_count = 0  then
        BEGIN 
            select count(*) into l_count_2 FROM dba_tab_cols  WHERE TABLE_NAME = 'table_1' AND COLUMN_NAME='NAME_2';
    
            IF l_count_2 > 0 THEN        
              INSERT INTO table_1 (xycolumn1, xycolumn2, xycolumn3) VALUES ('value1', 'select max(column) from table_2', '20' );          
            ELSE             
              INSERT INTO table_1 (xycolumn1, xycolumn2) VALUES ('value1', 'select max(column) from table_2');
            END IF;   
        END;
    END IF;       
    END;      
    

    最初のオプションは、文字列の作成と動的SQLに正しいOracleスペルを使用することであり、2番目のオプションは、INSERTを実行して動的SQLを完全に回避することです。 その場で(私が好むオプション)。

    編集: 発生したエラーは、INSERTをカプセル化していないためです。 文字列内。これは、correct Oracle spelling for string creations and dynamic SQLについて言及したときに最初のオプションで変更したものです。 。

    お役に立てば幸いです!



    1. SQLでHAVINGおよびORDERBY句を使用する方法

    2. このエラーは何ですか?データベースクエリが失敗しました:行1の列'column_name'のデータが切り捨てられました

    3. レコードを保存するときに特定の列が挿入されていません

    4. 行ごとに3つのアイテムを表示します-whileループ-php/mysql