首批通过分布式安全可靠测评,为关键业务系统打造
CREATE_WRAPPED
更新时间:2026-07-15 20:56:58
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函数,接受两个 number 类型的参数并返回一个 number 类型的结果。function div(a number, b number) return number:定义一个div函数,接受两个 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;
/
注意
实际的包装输出将是不可读的二进制或加密文本,上述示例仅用于说明。