首批通过分布式安全可靠测评,为关键业务系统打造
WRAP
更新时间:2026-07-15 20:56:58
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 包来创建对象类型,并通过不同的方法执行这些操作。 以下三个示例分别用了不同的方法来执行 SQL 语句。
示例一:
使用 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 语句。
示例二:
使用 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 语句。
示例三:
使用 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 语句数组。