---
title: "WRAP - OceanBase 数据库 V4.2.5 | OceanBase 文档中心"
description: WRAP WRAP 用于将 PL 对象定义字符串加密成 CREATE WRAPPED 语句字符串。 语法 DBMS_DDL.WRAP(DDL VARCHAR2) RETURN VARCHAR2; DBMS_DDL.WRAP(DDL DBMS_SQL.VARCHAR2S, LB PLS_INTEGER, UB PLS_…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.2.5 LTS

# WRAP

更新时间：2026-07-15 20:56:58

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.5/zh-CN/700.reference/500.sql-reference/300.pl-reference/300.pl-oracle/1400.pl-system-package-oracle/21100.dbms-ddl-oracle/200.dbms-ddl-wrap-oracle.md)  

`WRAP` 用于将 PL 对象定义字符串加密成 `CREATE WRAPPED` 语句字符串。

## 语法

```sql
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 | - DDL: 类型为 VARCHAR2 的字符串，包含要混淆的 PL/SQL 源代码。 - RETURN: 返回值，返回一个 VARCHAR2 类型的字符串，包含经过混淆处理后的 PL/SQL 代码。 |
| WRAP(DDL DBMS_SQL.VARCHAR2S, LB PLS_INTEGER, UB PLS_INTEGER) RETURN DBMS_SQL.VARCHAR2S | - DDL: 类型为 DBMS_SQL.VARCHAR2S 的数组，包含要混淆的 PL/SQL 源代码。 - LB: 类型为 PLS_INTEGER 的下界索引。 - UB: 类型为 PLS_INTEGER 的上界索引。 - RETURN: 返回值，返回一个 DBMS_SQL.VARCHAR2S 类型的数组，包含经过混淆处理后的 PL/SQL 代码。 |
| WRAP(DDL DBMS_SQL.VARCHAR2A, LB PLS_INTEGER, UB PLS_INTEGER) RETURN DBMS_SQL.VARCHAR2A | - DDL: 类型为 DBMS_SQL.VARCHAR2A 的数组，包含要混淆的 PL/SQL 源代码。 - LB: 类型为 PLS_INTEGER 的下界索引。 - UB: 类型为 PLS_INTEGER 的上界索引。 - RETURN: 返回值，返回一个 DBMS_SQL.VARCHAR2A 类型的数组，包含经过混淆处理后的 PL/SQL 代码。 |

## 示例

使用 PL/SQL 和 DBMS_DDL 包来创建对象类型，并通过不同的方法执行这些操作。 以下三个示例分别用了不同的方法来执行 SQL 语句。

**示例一：**

使用 `DBMS_DDL.WRAP` 包装单行 SQL 语句，然后通过 DBMS_SQL 包解析和执行。

```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` 直接执行。

```sql
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 包解析和执行。

```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 语句数组。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
