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ステートメント配列を解析することを意味します。