ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文

  メンテナンス 前画面に戻る

対象スレッド 件名: Oracle 動的SQL
名前: lightbox
処理選択
パスワード

件名 Oracle 動的SQL
名前 lightbox
コメント
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