WRAPは、PLオブジェクト定義文字列をCREATE WRAPPEDステートメント文字列に変換するために使用されます。
構文
DBMS_DDL.WRAP(DDL VARCHAR2) RETURN VARCHAR2;
DBMS_DDL.WRAP(DDL DBMS_SQL.VARCHAR2S,
LB PLS_INTEGER,
UB PLS_INTEGER) RETURN DBMS_SQL.VARCHAR2S;
DBMS_DDL.WRAP(DDL DBMS_SQL.VARCHAR2A,
LB PLS_INTEGER,
UB PLS_INTEGER) RETURN DBMS_SQL.VARCHAR2A;
パラメータ説明
パラメータ |
説明 |
|---|---|
| WRAP(DDL VARCHAR2) RETURN VARCHAR2 |
|
| WRAP(DDL DBMS_SQL.VARCHAR2S, LB PLS_INTEGER, UB PLS_INTEGER) RETURN DBMS_SQL.VARCHAR2S |
|
| WRAP(DDL DBMS_SQL.VARCHAR2A, LB PLS_INTEGER, UB PLS_INTEGER) RETURN DBMS_SQL.VARCHAR2A |
|
例
PL/SQLとDBMS_DDLパッケージを使用してオブジェクト型を作成し、さまざまな方法でこれらの操作を実行します。 以下の3つの例は、それぞれ異なる方法でSQLステートメントを実行しています。
例1:
DBMS_DDL_WRAP パッケージを使用して単一行のSQLステートメントをラップし、DBMS_SQLパッケージを使用して解析および実行します。
declare
wrapped varchar2(32767);
c number;
r number;
begin
wrapped := dbms_ddl.wrap('create or replace type typ0 as object (a number);');
c := dbms_sql.open_cursor;
dbms_sql.parse(c, wrapped, dbms_sql.native);
r := dbms_sql.execute(c);
dbms_sql.close_cursor(c);
end;
/
ここで:
wrapped: DBMS_DDL_WRAP処理後のSQLステートメントを格納するために使用されます。c: カーソル識別子を指します。dbms_sql.open_cursorは新しいカーソルを開くことを表し、dbms_sql.close_cursor(c)はカーソルを閉じることを表します。r: 実行結果を指します。r := dbms_sql.execute(c)は解析済みのSQLステートメントを実行することを表します。
例2:
DBMS_DDL_WRAP パッケージを使用して単一行のSQLステートメントをラップし、EXECUTE IMMEDIATE を使用して直接実行します。
declare
wrapped varchar2(32767);
begin
wrapped := dbms_ddl.wrap('create or replace type typ1 as object (a number);');
execute immediate wrapped;
end;
/
ここで:
dbms_ddl.wrap('create or replace type typ1 as object (a number);'): オブジェクト型を作成するSQLステートメントをラップすることを表します。execute immediate wrapped: ラップされたSQLステートメントを直接実行することを表します。
例3:
DBMS_DDL_WRAP パッケージを使用して複数行のSQLステートメント配列をラップし、DBMS_SQLパッケージを使用して解析および実行します。
declare
sqls dbms_sql.varchar2a;
c number;
r number;
begin
sqls(1) := 'create or replace type typ2 as object (';
sqls(2) := ' a number';
sqls(3) := ';';
sqls := dbms_ddl.wrap(sqls, 1, sqls.count);
c := dbms_sql.open_cursor;
dbms_output.put_line(sqls.count);
dbms_sql.parse(c, sqls, 1, sqls.count, false, dbms_sql_native);-- dbms_sql.parse linefeed flagパラメータはfalseに設定する必要があります。そうでない場合、余分な改行文字がcreate wrappedステートメントの構文解析に失敗させる原因となります。
r := dbms_sql.execute(c);
dbms_sql.close_cursor(c);
end;
/
ここで:
sqls := dbms_ddl.wrap(sqls, 1, sqls.count): 複数行のSQLステートメント配列をラップすることを表します。dbms_output.put_line(sqls.count):ラップされたSQLステートメント配列の長さを出力することを表します。dbms_sql.parse(c, sqls, 1, sqls.count, false, dbms_sql_native): ラップされたSQLステートメント配列を解析することを表します。