plsql 開発における動的 SQL の使用に関するチュートリアル (dbms_sql パッケージを使用しない)

一般的なPL/SQLプログラミングでは、SQLはDMLおよびトランザクション制御文で直接使用できますが、列名として適用されるパラメータを渡す必要がある新しいストアド・プロシージャの場合は、PL/SQLで直接使用できません。たとえば、設計された機能を実現したい場合は、動的 SQL を使用してそれを実現できます。

まず、動的 SQL とは何かを理解する必要があります。Oracle データベース開発の PL/SQL ブロックでは、使用する SQL は静的 SQL 文と動的 SQL 文に分けられます。いわゆる静的SQLとは、PL/SQLブロックで使用されるSQL文がコンパイル時に明確であり、何が実行されるかがオブジェクトを決定することを意味します。動的SQLとは、ユーザーが入力したパラメータに従って異なる操作を実行するなど、PL/SQLブロックのコンパイル時にSQL文が不確実であることを意味します。コンパイラは動的ステートメント部分を処理せず、プログラムの実行時にステートメントを動的に作成し、ステートメントの構文解析を実行して、ステートメントを実行するだけです。

Oracle の動的 SQL は、ローカル動的 SQL または DBMS_SQL パッケージを通じて実行できます。この記事では、SQL のローカルでの動的実行のみを紹介します。

Oracle バージョン 12 以降が適用されます。

動的SQL

drop package su1;

create or replace package su asfunction get_id() return varchar2;

end su;

/

create or replace package body su1 asfunction get_id() return varchar2

​	as

​	str_sql varchar2(200);

​	b varchar2(200);begin

​		str_sql := 'select * from b1';execute immediate str_sql into b;return b;end;

end su1;

/

select su1.get_id() from dual;

create or replace package su asfunction get_id(tabname in varchar2) return varchar2;

end su;

/

create or replace package body su1 asfunction get_id(tabname in varchar2) return varchar2

​	as

​	str_sql varchar2(200);

​	b varchar2(200);begin

​		str_sql := 'select * from '||tabname||'';execute immediate str_sql into b;  --注意这里仅有一行数据返回return b;end;

end su1;

/

select su1.get_id(‘b1’) from dual;


おすすめ

転載: blog.csdn.net/weixin_43786143/article/details/132225289
おすすめ