PLSQL学习笔记(一)

    xiaoxiao2024-03-26  121

    断断续续学过,这次系统地来读读。

    (一)

    PL/SQL是oracle在标准SQL语言上的过程性扩展,它不仅允许嵌入SQL语句,而且允许定义变量和常量,允许过程语言结构(条件语句和循环语句),允许使用异常处理oracle错误等。通过使用PL/SQL,可以在一个PL/SQL块中包含多条SQL语句和PL/SQL语句。PL/SQL具有以下优点:

    1。提高应用系统的运行性能。

    通过使用PL/SQL块包含多条SQL语句,从而减少了SQL语句的发送次数,降低了网络开销,提高了应用程序性能

    2。提供模块化的程序设计功能。

    将企业规则和商业逻辑集成到PL/SQL子程序当中,提供给客户端调用,简化了客户端应用程序的开发和维护工作,降低了耦合度

    3。允许定义标识符,允许定义变量、常量、游标和异常等标识符

    4。具有过程语言控制结构,允许使用条件分支语句和循环语句

    5。具有良好的兼容性,在允许运行oracle的任何平台上执行,不仅在数据库服务端执行,也可以在oracle提供的工具中开发PL/SQL

    6。处理运行错误,使用PL/SQL提供的EXCEPTION,开发人员可以集中处理各种oracle错误和PL/SQL错误,简化了错误处理。

    (二)

    PL/SQL块的概念:

    Block是PL/SQL的基本单元,编写PL/SQL本质上就是编写PL/SQL块,块的嵌套层次没有限制。

    1。块的结构:块由3部分组成

     

    DECLARE    定义部分——定义常量,变量,游标,异常,复杂数据类型等 BEGIN   执行部分EXCEPTION  异常处理部分 END /**/ /* 块结束标志 */

     

    其中只有执行部分是必须的!

    2。分类:

    1)匿名块,匿名块是指没有名称的PL/SQL块,可以内嵌到应用程序中,如:

    declare     v_name  VARCHAR2 ( 10 ); BEGIN      select  name  into  v_name  from  test  where  name =& no;    dbms_output.put_line( ' 名字: ' || v_name);    EXCEPTION     WHEN  NO_DATA_FOUND  THEN     dbms_output.put_line( ' 找不到该名字 ' ); end ;

    2)命名块:与匿名块相似,使用命名块主要是为了区分多级嵌套关系,如:

    << out >> declare     v_name  VARCHAR2 ( 10 ); BEGIN      << inner >>      begin             null ;     end ;     -- <<inner>>          select  name  into  v_name  from  test  where  name =& no;    dbms_output.put_line( ' 名字: ' || v_name);    EXCEPTION     WHEN  NO_DATA_FOUND  THEN     dbms_output.put_line( ' 找不到该名字 ' ); end -- <<outer>>

    3)子程序,又可以分成3种:过程、函数和包

    A。过程用于执行特定操作,当建立过程时既可以指定输入参数,也可以指定输出参数,从而在应用环境和程序间传递数据,使用CREATE PROCEDURE语句,如:

      create   or   replace   PROCEDURE  update_test(id2  NUMBER ,money2  LONG is     e_no_row EXCEPTION;  begin      update  test  set   money = money2  where  id = id2;     if  SQL % NOTFOUND  THEN       RAISE e_no_row;     end   if ; EXCEPTION     WHEN   e_no_row  THEN       raise_application_error( - 20004 , ' 该test不存在 ' );  end  update_test;

    B)函数,与过程主要不同是函数需要返回数据,在函数头和函数体都必须有RETURN语句,如:

     

    create   or   replace   FUNCTION  get_long(name2  VARCHAR2 ) RETURN   LONG   IS   avg_money  NUMBER ; begin    select   money   into  avg_money  from  test  where  name = name2;   RETURN  avg_money; end ;  

     

    C)包,类似JAVA包的概念,包含两部分,包规范和包体,包规范相当于C++中的头文件声明子程序,而包体包含这些子程序的具体实现。调用包中的子程序时,需要 ‘包名.子程序名’ 这样的形式调用

    4。触发器是指隐含执行的存储过程,定义触发器需要指定触发事件和触发操作,常见触发事件如insert,update,delete等,使用CREATE TRIGGER命令建立

    文章转自庄周梦蝶  ,原文发布时间5.17

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)