Sql 包装存储过程
我已经在Oracle中创建了一个存储过程(通过TOAD)。 我需要将这个过程交付给其他一些开发人员。所有需要做的就是包装过程,以便在基本级别上他/她不能查看代码。 同时,开发人员应该能够创建过程并执行/测试它 我的过程保存在文件名.sql中,其内容如下: 创建或替换过程 是 宣言 开始 代码 结束 现在我想包装这个FileName.sql。这样加密后的文件可以在不同的环境下发送给其他人进行检查 请帮助我如何包装,然后其他人将如何创建过程,并执行相同的Sql 包装存储过程,sql,oracle,plsql,plsqldeveloper,Sql,Oracle,Plsql,Plsqldeveloper,我已经在Oracle中创建了一个存储过程(通过TOAD)。 我需要将这个过程交付给其他一些开发人员。所有需要做的就是包装过程,以便在基本级别上他/她不能查看代码。 同时,开发人员应该能够创建过程并执行/测试它 我的过程保存在文件名.sql中,其内容如下: 创建或替换过程 是 宣言 开始 代码 结束 现在我想包装这个FileName.sql。这样加密后的文件可以在不同的环境下发送给其他人进行检查 请帮助我如何包装,然后其他人将如何创建过程,并执行相同的 提前感谢。OracleWRAP实用程序正是这
提前感谢。Oracle
WRAP
实用程序正是这样做的-允许您以适合装运的形式对存储过程进行编码。包装后的代码与源代码一样可移植,但不能作为纯文本进行检查 您需要使用合适的系统用户(即可以访问Oracle二进制命令的用户,如sqlplus等)访问命令行,基本语法为:
wrap iname=input_file [ oname=output_file ]
如果未指定任何扩展名,则输入的默认值为.sql
,输出的默认值为.plb
生成
.plb
文件后,可以对数据库执行该文件以创建存储过程
见:
WRAP
编码过程不是完全安全的-可以将其“打包”。使用
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!!!')
准确地说,从文档中可以看出,这是您需要做的: 运行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;
/
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 iname=wrap_test.sql
wrap实用程序的输出类似于以下内容:
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;
/
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.
您可以在SQL*Plus
中运行wrap\u test.plb
,以执行文件中的SQL语句:
SQL> @wrap_test.plb
运行wrap_test.plb
后,您可以执行创建的过程:
SQL> CALL wraptest();
更多信息请参见感谢您的回复,假设我将其放入了一个包中,比如创建或替换包作为过程(变量类型);结束;创建或替换包体作为程序代码结束;现在如何包装过程定义?我已经更新了答案=)