包装存储过程

时间:2014-10-09 08:00:22

标签: sql oracle plsql plsqldeveloper

我在Oracle中创建了一个存储过程(通过TOAD)。 我需要将此过程提供给其他开发人员。所有需要做的是包装程序,以便在基本级别他/她不应该能够查看代码。 同时,开发人员应该能够创建过程并执行/测试它。

我的程序保存在FileName.sql中,其内容如下:

创建或替换过程 IS    宣言 开始    码 端;

现在我想要包装这个FileName.sql。这样加密的文件就可以发送给其他人来检查不同的环境。

请帮助我如何包装,然后另一个人如何能够创建程序,并执行相同的程序。

提前致谢。

2 个答案:

答案 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();

docs

中的更多信息