1
次のコードをOracle Databaseで実行しましたが、ビュー名のエラーが発生しました。誰もそれを見ることができますか?DDL文で即時実行
Declare
Stmt varchar2(2000);
Var number;
Begin
Stmt:='create or replace view emp_dept_v as select * from emp';
Execute immediate stmt;
Select count(*) into var from emp_dept_v;
Dbms_output. Put_line(var);
End;
私はDDL文が自動コミットしていることを知っているが、この場合には、私は問題を解決するための即時の文を実行した後にコミット文を追加する必要があります。
私は良いです。しかし、それがうまくいかない理由として何らかの説明をしてください。前の行で作成したビューの値を取得しようとしています。 – Satyaki
@Satyakiあなたが選択したテーブルが存在しない場合でも、PL/SQLは 'compile 'しません。文字列としての' EXECUTE immediate'内のSQLはコンパイル時に無視されます。コンパイルが成功した場合にのみ、即時実行のSQLが実際に実行されます。 –
ありがとう。では、実行直後にコードにコミットを追加すると、なぜそれは機能しますか? – Satyaki