IF句内のいくつかの文を実行する必要があります。 しかし、私が直面している問題は、条件が偽であっても、ステートメントが実行されていることです。IF句内でselect/insert文を実行してください。Oracle
DECLARE
count_matching_row NUMBER := 0;
count_matching_tbl NUMBER := 0;
BEGIN
SELECT COUNT(*)
INTO count_matching_tbl
FROM user_tables
WHERE LOWER(table_name) = 'tab1';
IF(count_matching_tbl = 1)
THEN
SELECT COUNT (*)
INTO count_matching_row
FROM test1
WHERE ID IN (SELECT ID FROM tab1);
IF(count_matching_row = 0)
THEN
INSERT INTO review_case
SELECT
DISTINCT ID, d,e
FROM tab1
WHERE ID IS NOT NULL;
INSERT INTO review_case_payer
SELECT
a,b,c
FROM tab1
WHERE a IS NOT NULL;
COMMIT;
END IF;
END IF;
END;
/
これらの文を実行するたびに、テーブル 'tab1'が存在する場合は正常に動作します。 表TAB1は、私はエラー
取得存在しない場合、 "ORA-06550を:行13、列14: PL/SQL:ORA-00942:表またはビューが存在しない" をIはそれぞれのための同様のエラーを取得します私がテーブル "tab1"にアクセスしようとしている行
私はREFカーソルで試しましたが、それと同じですが、私はそれを挿入ステートメントに使用できません。
テーブルが存在しない場合は、コードウォンまったくコンパイルしない - Oracleはテーブルが存在しないと不平を言うでしょう。静的SQLではなく動的SQLを使用する必要があります。 – krokodilko
PL/SQLはコンパイルされた言語です。すべてが有効な参照で正常にコンパイルされなければならないか、JavaやPerlのように全く実行されません。スクリプト言語ではなく、行ごとに混乱しています。 –