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