EXECUTE IMMEDIATE用法小結

2310 ワード

解析してすぐに動的なSQL文または非運転時に作成したPL/SQLブロックを実行します。SQL文の性能が先行して動的に作成し、実行します。EXECUTE IMMEDIATEは、企業費を低減し、より高い性能を得ることを目標にしています。これは以前よりかなり容易に符号化されます。DBMS_uにもかかわらず、SQLはまだ使えますが、EXECUTE IMMEDIATEはそれが得られた収益がカバンの上にあるからです。スキル1.EXECUTE IMMEDIATEはDMLトランザクションの実行を提出しません。EXECUTE IMMEDIATEでDMLコマンドを処理すると、完成前に明示的に提出する必要があります。EXECUTE IMMEDIATE自身の一部として、EXECUTE IMMEDIATEでDDLコマンドを処理すれば、以前に変更したデータをすべて提出します。複数のクエリには対応しません。このようなインタラクションは、一時的なテーブルで記録(例を参照してください)を保存します。またはREF_cursors.3.SQL文を実行するときは、セミコロンを使用しないでください。PL/SQLブロックを実行するときは、その末尾にセミコロンを使用します。4.Oracleマニュアルでは、これらの機能を詳細にカバーしていません。以下の例では、Execute immediateを使用するすべての可能性を示しています。便利にしてほしいです。5.Forms開発者に対しては、PL/SQL 8.0.63.バージョンではForms 6 iはこの機能を使用できません。EXECUTE IMMEDIATE-用法例1.PL/SQLでDDL文Begin execute emediate'roleを実行します。end;2.動態文に値(USING子文)declare l_depnam varrchar 2(20):='testing'l_loc varrrhar 2(10)='Dubai'begin execute immediate'insert into dept values(:1,2,3)'using 50,l_depnam,l_loc;comitend;3.動的語句から値(INTO子文)declare l_cnt varrrchar 2(20)begin execute immediate'select count(1)from emp'into l_cnt;dbms_out put.put_ラインcnt;end;4.ダイナミック呼び出しルーチン.ルーチンで使用するバインディング変数はパラメータタイプを指定しなければなりません。INタイプと考えています。他のタイプはdeclare l_を明示的に指定しなければなりません。routin varrrchar 2(100):='gen 21611.get_rowcnt;l_tblnam varrchar 2(20)='emp'l_cnt numberl_スタークラフト2(200)begin execute immediate'begin'|l_routin𞓜(:2,3,4)end;using in l_tblnam,out l_cnt,in out l_statusif l_status!='OK'then dbms_out put.put_ラインend if;end;5.戻り値をPL/SQLレコードタイプに渡す。同じく%rowtype変数declare type empdtlrec is record(empno number(4)、ename varrhar 2(20)、deptno number(2);empdtl empdtlrec;begin execute immediate'select empno,ename,deptno'from emphere empno=7934'into empdtl;end;6.値を伝達して検索します。INTO子文はUSING子文の前にdeclare l_を使います。dept pls_integer:=20;l_nam varrchar 2(20)l_loc varrchar 2(20)begin execute immediate'select dname,loc from dept no=:1'into l_nam,l_loc using l_dept;end;7.複数行のクエリオプション。このオプションについてはinsert文で仮テーブルを埋め、仮テーブルでさらなる処理を行い、REF cursorsでこの欠陥を修正することもできます。declare l_sal pls_integer:=2000begin execute immediate'insert into temp(empno,ename)'|𞓜select empno,ename from emp'||总[where sal]:1'using l_sal;comitend;ダイナミックステートメントを処理するには、EXECUTE IMMEDIATEは、以前に使用されたものよりも容易で効率的です。ダイナミックステートメントを実行する意図がある場合には、異常を適切に処理することが重要です。可能なすべての異常を捕捉することに注目します。