叽叽歪歪

    follow me on Twitter

    PL/SQL的两种应用模式

    |
    服务器端的P L / S Q L
    从O r a c l e 6 . 0版开始,P L / S Q L就驻留在数据库服务器端,同时,该服务器也是P L / S Q L引擎的默认位置。由于数据库服务器可以处理S Q L语句,所以S Q L语句和P L / S Q L块都可以送到该服务器进行处理。一个客户应用,不管是用O r a c l e开发工具实现的或使用其他开发工具编制的,都可以向数据库服务器提交S Q L语句和P L / S Q L块。SQL *Plus就是一个这种客户应用的案例,该程序可以在S Q L提示符下接收交互输入的S Q L语句和P L / S Q L命令并将其送往服务器执行。例如,我们可以假设在SQL *Plus与服务器建立了连接的情况下输入下列的SQL,P L / S Q L命令:
    SQL_PLSQL.sql
    SQL> CREATE OR REPLACE PROCEDURE ServerProcedure AS
    2 BEGIN
    3 NULL;
    4 END ServerProcedure;
    5 /
    Procedure created.
    SQL> DECLARE
    2 v_StudentRecord students%ROWTYPE;
    3 v_Counter BINARY_INTEGER;
    4 BEGIN
    5 v_Counter := 7;
    6
    7 SELECT *
    8 INTO v_StudentRecord
    9 FROM students
    10 WHERE id = 10001;
    11
    12 ServerProcedure;
    13
    14 END;
    15 /
    PL/SQL procedure successfully completed.
    SQL> UPDATE classes
    2 SET max_students = 70
    3 WHERE department = 'HIS'
    4 AND course = 101;
    1 row updated.


    图1演示了在服务器端的P L / S Q L引擎对P L / S Q L块的处理过程。客户应用可以向服务器提
    交P L / S Q L块(该块可以带有过程和包括调用服务器端存
    储过程的S Q L语句),以及单独的S Q L语句。如图所示, P L / S Q L块和S Q L语句通过网络送往服务器。一旦服务器收到了这些内容, S Q L语句将直接进入服务器内含的S Q L语句执行器,而P L / S Q L块则送往P L / S Q L引擎进行语法分析。在该块的运行期间, P L / S Q L引擎负责执行过程语句(如赋值语句和存储过程调用)。对于该块中出现的S Q L语句(如S E L E C T语句等),P L / S Q L引擎将它们送往S Q L语句执行器执行。



    客户端的P L / S Q L
    除了在服务器端的P L / S Q L引擎外,几种O r a c l e开发工具也带有P L / S Q L引擎。由于这些开发工具是运行在客户端的,所以它们的P L / S Q L引擎也可以运行在客户端。这样一来,借助于客户端的P L / S Q L支持,P L / S Q L块中的过程语句就可以在本地运行,而没有必要送到服务器端。例如开发工具Oracle Forms(该工具是Oracle Developer的一部分)自身带有P L / S Q L引擎;在O r a c l e D e v e l o p e r工具包中,如Oracle Reports也带有P L / S Q L引擎。需要指出的是这种引擎与P L / S Q L服务器端的引擎有所不同。P L / S Q L块只能出现在客户端应用中,并且该块必须用开发工具来编制。
    假设一个Oracle Forms应用包括了触发器和过程,这些语句都在客户端执行。只有该程序中的S Q L语句和调用服务器端存储子程序的语句被送往服务器进行处理。如图2 所示,客户端的P L / S Q L引擎可以处理过程语句。

    与服务器端的P L / S Q L一样,应用程序提交的单独的S Q L语句(如U P D AT E语句)直接通过网络送往服务器端的S Q L语句执行器。
    不同的是, P L / S Q L块是在客户端直接处理。任何过程语句(如赋值语句)的处理都不会引起网络传输。P L / S Q L块中的S Q L语句要提交给S Q L语句执行器,对服务器端的存储子程序的调用则是送到服务器端的P L / S Q L引擎执行。




    再补一图:

    Because PL/SQL is used both in the database (for stored procedures and database triggers) and in the application code (to implement logic within a form, for example), you can leverage the same programming language for both client-side and server-side development. You can even move programs from one component of the configuration to another.For example, you might decide that a function which was originally coded for a single screen could be shared by all of the modules in an application. To make this happen, you simply move that function from the client-side screen component to the server-side database environment. You have to change neither the PL/SQL code nor any of the programs that call that function.

    0 comments:

    Post a Comment