APEX调用外部存储函数或存储过程

时间:2014-04-08 12:54:24

标签: oracle plsql oracle-apex

是否有任何"最佳做法"如何从APEX调用存储过程而不是仅使用简单的DB-Link?

1 个答案:

答案 0 :(得分:5)

在Oracle APEX中调用PL / SQL存储过程

通过将PL / SQL存储过程与基于Application Express Web的框架工作相结合,开发健壮,可维护和高效的解决方案需要大量细节。不知道OP作者的当前技能水平,我认为最有用的解释是从头开始开发的一个简单示例。

入门:APEX环境有很多可以帮助您入门的工具。如果您还没有安装了APEX的Oracle数据库环境,请考虑通过Oracle.com上的APEX home page注册免费的托管试用帐户。

应用程序设计决策

在Oracle APEX上开发应用程序不需要PL / SQL存储过程,但是它们确实在开发过程中提供了更大的灵活性和自定义。

此示例将使用流行的架构对象:EMP通常作为每个Oracle数据库安装的可选部分提供。如果你没有它,这里是用于构建示例表的DDL和DML源:

EMP表格(副本别名为:LAB01_SAMPLE_EMP

 CREATE TABLE  "EMP"
    (    "EMPNO" NUMBER(4,0) NOT NULL ENABLE,
     "ENAME" VARCHAR2(10),
     "JOB" VARCHAR2(9),
     "MGR" NUMBER(4,0),
     "HIREDATE" DATE,
     "SAL" NUMBER(7,2),
     "COMM" NUMBER(7,2),
     "DEPTNO" NUMBER(2,0),
      PRIMARY KEY ("EMPNO") ENABLE
    )
 /
 ALTER TABLE  "EMP" ADD FOREIGN KEY ("MGR")
       REFERENCES  "EMP" ("EMPNO") ENABLE
 /

如果你想要一些测试数据,这就是我必须使用的:

Sample HR Data for the HR Table

  1. 构建基于SQL的DML更新语句,该语句将根据SAL一次更改一名员工的ENAME(薪水)值。

  2. 将UPDATE DML语句WRAP到可重用的,已编译的PL / SQL存储过程中。包含" Name"的两个数据输入值的参数参数。和"增加金额"。

  3. 测试存储过程并验证其是否正常工作。

  4. 设计和代码APEX申请页面:

    (a)显示员工实体表的当前内容。 (b)接受输入值以传递到PL / SQL存储过程。 (c)利用原生APEX ErrorSuccess消息设置,提供有关程序调用结果的更多反馈。

  5. 测试APEX页面并验证其是否按指定工作。

  6. 最后回顾讨论和结论部分,以获取更多意见和更多提示,让您继续沿着自己的方向发展Oracle技能。

  7. 编写SQL DML过程

    这是为完成此任务而创建的初始示例。

        UPDATE LAB01_SAMPLE_EMP
           SET SAL = SAL + 1250
         WHERE ENAME = 'KING';
    

    快速修订版揭示了我们如何参数化制作此陈述的方法

        UPDATE LAB01_SAMPLE_EMP
           SET SAL = SAL + p_salary_increase
         WHERE ENAME = p_ename;
    

    如果您不确定下一步该去哪里,那就是“最佳实践”课程。可以通过APEX获得。导航到OBJECT BROWSER并创建一个过程对象。应用程序将遍历每个步骤以设置PL / SQL存储过程。

    Setting Up an Oracle PL/SQL Stored Procedure through APEX

    工作PL / SQL过程源代码:

    完成向导设置后,这是已清理的存储过程。在调试一些编译时错误警告后,还有一些其他更改:

     create or replace procedure "PROC_UPDATE_SALARY"
        (p_ename IN VARCHAR2, p_salary_increase IN VARCHAR2)
     is
    
     v_new_salary   lab01_sample_emp.sal%TYPE;       
    
     begin
    
           UPDATE LAB01_SAMPLE_EMP
              SET SAL = SAL + p_salary_increase
            WHERE ENAME = p_ename
        RETURNING SAL INTO v_new_salary;
    
     commit;
    
     dbms_output.put_line('INCREASED SALARY FOR: ' || p_ename ||
         ' TO THE NEW AMOUNT OF: $ ' || to_char(v_new_salary));
    
     end;
    
      

    最佳做法,快速解决和讨论: 您只需要继续这样做......编码就是这样。没有办法绕过它。寻找工作或生活中的例子,并尝试开发模式和设计,以满足成熟但现实的要求。对于初学者来说,上面的PL / SQL存储过程可能已经显示了一些不熟悉的"或奇数编码语法和命令。

         

    这只是那里可能的一小部分。当你深入了解事物时,编码风格也只是它的一部分,你可能会注意到一些事情:

         
        
    1. 组织很重要。快速了解命名和符号中的一些约定以在代码中使用。这将使事情井井有条,易于在其他地方找到或参考。

    2.   
    3. RECYCLE和REUSE 意味着您的代码应该在重用的情况下开发。应将常用例程和进程捆绑在一起以避免冗余。

    4.   
    5. 始终测试您的工作表明,在继续进行之前,您的流程或应用程序中的初始基本步骤已经过仔细测试,从而减少了挫折感。

    6.   

    测试Oracle PL / SQL过程

    我使用了环境SQL WORKSHOP部分中的内置APEX脚本引擎。下面是我的测试脚本的输出日志的屏幕截图。

    Custom PL/SQL Stored Procedure Test Output

    将它集合在一起:使用过程调用设计APEX应用程序页面

    创建或打开APEX应用程序,然后通过创建新页面开始。有一些系统向导过程可以帮助您开始,如果您以前没有这样做过。

    APEX Form Wizard Screen

    BUILD之上选择FORM STORED PROCEDURE REPORT选项。将提示创建输入参数所需的页面项的权限。按照向导完成以确保包含所有相关页面设计元素。

    我的近乎完成的设计如下:

    添加了一些额外内容,例如SUCCESS区域,以便立即提供对表的可见性以及对其数据的任何应用更改。

    APEX Form and Report Page for HR-EMP Data

    表格在行动:测试数据输入和结果

    APEX Form Submit with Back End Stored Procedure Operation

    EMP-2.0警报消息是某些页面元素可用的功能,用于通知用户在数据库上执行的任何重大事件。

    结束评论和讨论

    对OP问题的直接回答是,有最佳做法。这是一个如此巨大的主题,处理它的唯一现实的方法是通过不同的例子来看看这些实践的方式通常"应用。

    这个解决方案中有一些快捷方式(基于几个假设),并且可能有助于将它们作为一个分离讨论,讨论重新审视此演练以进行改进的可能性,EMP项目

      
        
    • 此过程适用于基于ENAME搜索的PL/SQL EXCEPTION BLOCK表格。这个表的 REAL 键是什么?这种方法是否存在任何风险 - 可能涉及更大的数据集?

    •   
    • 生产就绪环境中使用的大多数Oracle PL / SQL对象都通过{{1}}进行了一定程度的错误捕获或异常处理。你想要陷入什么样的错误?怎么样?

    •   

    不要低估APEX工具中可用的资源。有许多向导可以让开发人员完成创建不同功能的代码模块的过程。这些自动化指南提供的解决方案也可以进行逆向工程,以了解代码的生成方式以及通用设计方法的合规设计模式。