CREATE_WRAPPEDは、PLオブジェクト定義文字列をCREATE WRAPPEDステートメント文字列に暗号化し、このステートメントを実行してWRAPPEDオブジェクトを作成するために使用されます。
構文
DBMS_DDL.CREATE_WRAPPED (DDL VARCHAR2);
DBMS_DDL.CREATE_WRAPPED(DDL DBMS_SQL.VARCHAR2A,
LB PLS_INTEGER,
UB PLS_INTEGER);
DBMS_DDL.CREATE_WRAPPED(DDL DBMS_SQL.VARCHAR2S,
LB PLS_INTEGER,
UB PLS_INTEGER);
パラメータの説明
| パラメータ | 説明 |
|---|---|
| CREATE_WRAPPED (DDL VARCHAR2) |
|
| CREATE_WRAPPED(DDL DBMS_SQL.VARCHAR2A, LB PLS_INTEGER, UB PLS_INTEGER) |
|
| CREATE_WRAPPED(DDL DBMS_SQL.VARCHAR2S,LB PLS_INTEGER,UB PLS_INTEGER) |
|
例
DBMS_DDLパッケージ内のCREATE_WRAPPEDプロシージャを使用して、ラップされたPL/SQLパッケージを作成します。これは、元のPL/SQLコードを読み取りにくい形式に変換し、直接の閲覧や変更を防ぐためです。
CALL dbms_ddl.create_wrapped(
'-- this is a comment' || chr(10) ||
'create or replace package arithmetic as' || chr(10) ||
' function add(a number, b number) return number; -- this is a comment' || chr(10) ||
' function sub(a number, b number) return number; /* comment */' || chr(10) ||
' function /* comment */ mul(a number, b number) return number;' || chr(10) ||
' /* comment1' || chr(10) ||
' comment2' || chr(10) ||
' comment3 */' || chr(10) ||
' function div(a number, b number) return number;' || chr(10) ||
'end arithmetic;' || chr(10) ||
'-- comment' || chr(10) ||
'/* comment */'
);
Query OK, 0 rows affected (0.612 sec)
ここで:
create or replace package arithmetic as:arithmeticという名前のパッケージを定義します。function add(a number, b number) return number:add関数を定義します。2つのnumber型のパラメータを受け取り、number型の結果を返します。function div(a number, b number) return number:div関数を定義します。2つのnumber型のパラメータを受け取り、number型の結果を返します。end arithmetic:パッケージの定義を終了します。-- comment:単一行コメント。/* comment */:複数行コメント。
ラップ後のコードは、読み取れない文字列になります。形式は次のようになります(具体的な出力はバージョンや環境によって異なります):
BEGIN
DBMS_DDL.CREATE_WRAPPED('package body "SCHEMA_NAME"."ARITHMETIC" is
function "ADD"(a in number, b in number) return number is
begin
return a + b;
end;
function "SUB"(a in number, b in number) return number is
begin
return a - b;
end;
function "MUL"(a in number, b in number) return number is
begin
return a * b;
end;
function "DIV"(a in number, b in number) return number is
begin
if b = 0 then
raise value_error;
else
return a / b;
end if;
end;
end "ARITHMETIC";');
END;
/
注意
実際のラップ出力は読み取れないバイナリまたは暗号化テキストであり、上記の例は説明用にのみ提供されています。