コメント |
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19257-01/langelems.html#13355(EXECUTE IMMEDIATE文)
@SHOW
SQLデータ定義文(CREATEなど)、データ制御文(GRANTなど)またはセッション制御文(ALTER SESSIONなど)を実行する場合、INSERT文、UPDATE文およびDELETE文とは異なり、これらの文はPL/SQLプログラム内に[[直接含めることができません。]]
@END
@SHOW
デフォルトでは、ストアド・プロシージャおよびSQLメソッドは、現行ユーザーの権限ではなく所有者の権限で実行します
@END
[[
以下の処理では、テーブルを作成していますがそのままでは権限エラーとなるので、AUTHID 句を
使用しています。また、識別子にバインド変数は使用できません
]]
@DIV
/*
/*==========================================================
動的表作成
===========================================================*/
CREATE or REPLACE PROCEDURE 表作成
(
PM_TABLE IN VARCHAR2
)
[[AUTHID CURRENT_USER]] AS
W_SQL VARCHAR2(1000);
BEGIN
/*==========================================================
処理
===========================================================*/
W_SQL := 'CREATE TABLE ' || PM_TABLE || '(';
W_SQL := W_SQL || 'コード VARCHAR2(4),';
W_SQL := W_SQL || '名称 VARCHAR2(40),';
W_SQL := W_SQL || 'primary key(コード)';
W_SQL := W_SQL || ')';
EXECUTE IMMEDIATE W_SQL;
/*==========================================================
終了処理
===========================================================*/
END 表作成;
/
@END
↓この PL/SQL は作成されない
@DIV
/*
/*==========================================================
動的表作成
===========================================================*/
CREATE or REPLACE PROCEDURE 表作成
(
PM_TABLE IN VARCHAR2
)
AS
BEGIN
/*==========================================================
処理
===========================================================*/
CREATE TABLE 名称マスタ (
コード VARCHAR2(4),
名称 VARCHAR2(40),
primary key(コード)
);
/*==========================================================
終了処理
===========================================================*/
END 表作成;
/
@END
|