PL/SQL学习笔记(一)

最近因为对Oracle比较感兴趣,所以打算深入学习一下PL/SQL,后期打算再学习一下Oracle ERP,正好有机会进到这个项目团队,正好可以跟老鸟门学习一下,下面是我的学习经历和笔记

 

 

PL/SQL块结构

 

    DECLARE
    /*
     *  定义部分-定义常量、变量、复杂数据类型、游标、例解
     */
    BEGIN
    /*
     *  执行部分-PL/SQL语句和SQL语句
     */
    EXCEPTION
    /*
     *  例外处理部分-处理运行错误
     */
    END;   /* 块结束标记*/

 

   定义部分DECLARE是可选的,执行部分以BEGIN开始,是必须的,例外处理部分以EXCEPTION开始,该部分是可选的,而END是PL/SQL块的结束标记

 

PL/SQL块分类 :可以分为匿名块和命名块,匿名块可以内嵌到应用程序中,也可以在交互环境使用。命名块是具有特定标识的PL/SQL块,命名块和匿名块非常相似,只不过在PL/SQL块前加以<<>>标记,当使用嵌入时,为了区分多级嵌套曾次关系,可以使用命名块加以区分。

 

 

 子程序

 

 子程序包括过程,函数,包。既可以开发客户端的子程序,也可以开发服务器端的子程序,客户端主要用在Developer中,而服务器子程序可以用在任何应用程序中,通过将商业逻辑和企业规则集成到PL/SQL子程序中。

 

 过程 :是用于执行特定操作,当建立过程时,既可以指定输入参数(IN),也可以指定输出参数(OUT)。通过在过程中使用输入参数,可以将应用环境的数据传递到执行部分;通过使用输出参数,可以将执行部分的数据传递到应用环境。在SQL*PLUS中可以使用CREATE PROCEDURE命令建立过程。

  eg:

      CREATE PROCEDURE update_sal(name VARCHAR2,newsal NUMBER)

      IS

      BEGIN

         UPDATE emp SET sal = newsal

         WHERE lower(ename) = lower(name);

      END;

 

 

     SQL>exec update_sal('scott',2000);

     SQL>call update_sal('scott',2000);

 

 

函数 :用于返回特定数据,当建立函数时,在函数头部必须包含RETURN子句,而在函数体内必须要包含RETURN语句返回数据。在SQL*PLUS中可以使用CREATE FUNCTION命令建立函数。

 

    eg:

        CREATE FUNCTION annual_income(name VARCHAR2)

        RETURN NUMBER IS

           annual_salary NUMBER(7,2);

        BEGIN

           SELECT sal*12+nvl(comm,0) INTO annual_salary

           FROM emp WHERE lower(ename) = lower(name);

           RETURN annual_salary;

        END;

 

 

     SQL>VAR income NUMBER

     SQL>CALL annual_income('scott') INTO :income

     SQL>PRINT income

:用于逻辑组合相关的过程和函数,它由包规范和包体两部分组成。包规范用于定义公用的常量、变量、过程和函数,在SQL*PLUS中可以使用CREATE PACKAGE命令建立包规范,使用CREATE PACKAGE BODY命令建立包体。

 

     eg:

         CREATE PACKAGE emp_pkg IS

              PROCEDURE update_sal(name VARCHAR2,newsal NUMBER);

              FUNCTION annual_income(name VARCHAR2) RETURN NUMBER;

         END;

 

         CREATE PACKAGE BODY emp_pkg IS

              CREATE PROCEDURE update_sal(name VARCHAR2,newsal NUMBER)

              IS

              BEGIN

                  UPDATE emp SET sal = newsal

                  WHERE lower(ename) = lower(name);

              END;

 

              CREATE FUNCTION annual_income(name VARCHAR2)

              RETURN NUMBER IS

                   annual_salary NUMBER(7,2);

              BEGIN

                   SELECT sal*12+nvl(comm,0) INTO annual_salary

                   FROM emp WHERE lower(ename) = lower(name);

                   RETURN annual_salary;

              END;

           END;

 

调用包的过程和函数时,在过程和函数名之前必须要带有包名作为前缀(包名.子程序名),如果要访问其他方案的包,还必须加方案作为前缀(方案名.包名.子程序名)

 

    SQL>call emp_pkg.update_sal('scott',1500);

    SQL>VAR income NUMBER;

    SQL>call emp_pkg.annual_income('scott') INTO :income;

    SQL>PRINT income

 

触发器 :是用于隐含执行的存储过程,当定义触发器时,必须要触发事件和触发操作,常用的触发事件包括INSERT、UPDATE、DELETE语句,而出发操作实际是一个PL/SQL块,在SQL*PLUS中,可以使用CREATE TRIGGER命令来完成。

 

 

 

PL/SQL数据类型:在编写PL/SQL程序时,可以使用标量类型、复合类型、参照类型、LOB类型。

 

   

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值