我在Oracle中创建了一个存储过程(通过TOAD)。 我需要将此过程提供给其他开发人员。所有需要做的是包装程序,以便在基本级别他/她不应该能够查看代码。 同时,开发人员应该能够创建过程并执行/测试它。
我的程序保存在FileName.sql中,其内容如下:
创建或替换过程 IS 宣言 开始 码 端;
现在我想要包装这个FileName.sql。这样加密的文件就可以发送给其他人来检查不同的环境。
请帮助我如何包装,然后另一个人如何能够创建程序,并执行相同的程序。
提前致谢。
答案 0 :(得分:2)
Oracle WRAP
实用程序就是这样做的 - 允许您以适合发货的形式对存储过程进行编码。
包装的代码与源代码一样可移植,但不能以纯文本形式进行检查。
您需要使用合适的系统用户访问命令行(即可以访问Oracle二进制命令的用户,例如sqlplus等),基本语法为:
wrap iname=input_file [ oname=output_file ]
如果您未指定任何扩展程序,则输入的默认值为.sql
,输出为.plb
生成.plb
文件后,可以对数据库执行该文件以创建存储过程。
请参阅:
WRAP
编码的程序并不完全安全 - 可以“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!!!')
答案 1 :(得分:0)
从文档来看,确切地说,这就是您需要做的事情:
运行wrap实用程序
例如,假设wrap_test.sql
文件包含以下内容:
CREATE PROCEDURE wraptest IS
TYPE emp_tab IS TABLE OF employees%ROWTYPE INDEX BY PLS_INTEGER;
all_emps emp_tab;
BEGIN
SELECT * BULK COLLECT INTO all_emps FROM employees;
FOR i IN 1..10 LOOP
DBMS_OUTPUT.PUT_LINE('Emp Id: ' || all_emps(i).employee_id);
END LOOP;
END;
/
要包装文件,请从操作系统提示符处运行以下命令:
wrap iname=wrap_test.sql
wrap实用程序的输出类似于以下内容:
PL/SQL Wrapper: Release 10.2.0.0.0 on Tue Apr 26 16:47:39 2005
Copyright (c) 1993, 2005, Oracle. All rights reserved.
Processing wrap_test.sql to wrap_test.plb
If you view the contents of the wrap_test.plb text file, the first line is CREATE PROCEDURE wraptest wrapped and the rest of the file contents is hidden.
您可以在wrap_test.plb
中运行SQL*Plus
来执行文件中的SQL语句:
SQL> @wrap_test.plb
运行wrap_test.plb
后,您可以执行已创建的过程:
SQL> CALL wraptest();
中的更多信息