Oracle WRAP 实用程序正是这样做的 - 允许您以适合运输的形式对存储过程进行编码。
包装后的代码与源代码一样可移植,但不能作为纯文本进行检查。
您需要使用合适的系统用户访问命令行(即可以访问 Oracle 二进制命令的用户,例如 sqlplus 等),基本语法为:
wrap iname=input_file [ oname=output_file ]
如果不指定任何扩展名,则输入默认为.sql,输出默认为.plb
一旦你生成了一个.plb 文件,你就可以对数据库执行它来创建你的存储过程。
见:
警告
WRAPencoded 程序并不完全安全 - 可以“unwrap”它们。
使用WRAP 的更好方法是将要保护的过程放在一个包中,并将WRAP 放在包定义中。
假设您的程序是:
CREATE OR REPLACE PROCEDURE PR_OUTPUT_TEXT(
P_TYPE IN CHAR,
P_TEXT IN VARCHAR2
) IS
V_TYPE CHAR(3) := UPPER(P_TYPE);
BEGIN
IF V_TYPE = 'LOG' THEN
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG, TO_CHAR(SYSDATE,'HH24:MI:SS')||' - '||P_TEXT);
ELSE
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT, P_TEXT);
END IF;
END PR_OUTPUT_TEXT;
你通常会使用:
EXECUTE PR_OUTPUT_TEXT('LOG', 'Kittehz!!!')
在一个包中,你可以定义包体和过程:
CREATE OR REPLACE PACKAGE BODY USER.MYPACKAGE AS
PROCEDURE PR_OUTPUT_TEXT(
P_TYPE IN CHAR,
P_TEXT IN VARCHAR2
) IS
BEGIN
IF V_TYPE = 'LOG' THEN
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG, TO_CHAR(SYSDATE,'HH24:MI:SS')||' - '||P_TEXT);
ELSE
APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.OUTPUT, P_TEXT);
END IF;
END PR_OUTPUT_TEXT;
END MYPACKAGE;
你会调用这个包:
EXECUTE USER.MYPACKAGE.PR_OUTPUT_TEXT('LOG', 'ERMAHGERD KERTERNS!!!')