DBMS_DDL
功能说明
DBMS_DDL提供对存储过程中某些SQL数据定义语言(DDL)语句的访问。
子程序 | 描述 |
---|---|
WRAP | 函数将单个CREATE OR REPLACE语句作为输入(此语句指定创建PL/pgSQL包规范、包体、函数、过程、类型规范或类型主体,并返回一个CREATE OR REPLACE语句),并在PL/pgSQL单元的文本已被混淆的情况下返回一条CREATE OR REPLACE语句。 |
注意事项
该功能仅在数据库兼容模式为Oracle时支持(即数据库初始化时指定DBCOMPATIBILITY='A')。
子程序
WRAP
语法格式
提供基本功能:
DBMS_DDL.WRAP( ddl VARCHAR2) RETURN VARCHAR2;
提供基本功能以外,允许更大的输入,且是为了与DBMS_SQL包中多种形式的PARSE函数兼容而提供的:
DBMS_DDL.WRAP( ddl DBMS_SQL.VARCHAR2A, lb PLS_INTEGER, ub PLS_INTEGER) RETURN DBMS_SQL.VARCHAR2A;
参数说明
ddl
CREATE OR REPLACE的语句,此语句指定了PL/pgSQL包规范、包体、函数、过程、类型规范或类型主体。
1b
字符串表中指定CREATE OR REPLACE语句的索引的下限。
ub
字符串表中指定CREATE OR REPLACE语句的索引的上限。
示例
示例1: WRAP函数加密对象为自定义函数。
1、设置serveroutput 为on(允许将dbms_output.put_line的输出信息输出至vsql的命令界面的屏幕上)。
SET SERVEROUTPUT ON;
2、声明匿名块调用DBMS_DDL.WRAP函数,为自定义函数加密。
DECLARE
l_source DBMS_SQL.VARCHAR2A;
l_wrap DBMS_SQL.VARCHAR2A;
BEGIN
l_source(1) := 'CREATE OR REPLACE FUNCTION get_date_string RETURN VARCHAR2 AS ';
l_source(2) := 'BEGIN ';
l_source(3) := 'RETURN TO_CHAR(SYSDATE, ''DD-MON-YYYY''); ';
l_source(4) := 'END get_date_string;';
l_wrap := DBMS_DDL.WRAP(ddl => l_source,
lb => 1,
ub => l_source.count);
FOR i IN 1 .. l_wrap.count LOOP
DBMS_OUTPUT.put_line(l_wrap(i));
END LOOP;
END;
/
返回结果为如下,返回加密后的结果:
CREATE OR REPLACE FUNCTION get_date_string wrapped
101 90
wxVmMHBeM21zMGtyQ35oOWMfHUETIF4N71IAHU8HDF4x700S704EFkUN5AwvI1te5Av23iQSJF8D
DFAE+ywmE0AsGFsN+FUYJFUm9EcfEFoD71D/H35oOWM6
ANONYMOUS BLOCK EXECUTE
示例2: WRAP函数加密对象为CREATE TYPE BODY。
1、设置serveroutput 为on(允许将dbms_output.put_line的输出信息输出至vsql的命令界面的屏幕上)。
SET SERVEROUTPUT ON;
2、声明匿名块调用DBMS_DDL.WRAP函数,为自定义函数加密。
DECLARE
l_source VARCHAR2(32767);
l_wrap VARCHAR2(32767);
BEGIN
l_source := 'CREATE TYPE BODY data_typ1 IS' ||
'MEMBER FUNCTION prod (invent NUMBER) RETURN NUMBER IS ' ||
'BEGIN ' ||
'END; '||
'END; ' ||
'/';
l_wrap := DBMS_DDL.WRAP(ddl => l_source);
DBMS_OUTPUT.put_line(l_wrap);
END;
/
返回结果为如下:
CREATE TYPE BODY data_typ1 wrapped
83 81
hHPI+dvF99wdBJiE4brx3bTm3bmE3rzy27vt57WEBNoT+IeMAdYa/dYYtLX5tWgnwYf23bv56rWz
lFeqtKD3tKnp36DytKzy2JKE3bXo04fT
ANONYMOUS BLOCK EXECUTE