Oracle学习笔记(2)

PL/SQL             
      PL /SQL优点:
        1 .良好的交互性
        2 .无法替代的触发器功能
        3 .自动优化(尤其针对余大循环,  PL /SQL性能更优)
    
      PL /SQL块的结构
        DECLARE
           声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数
     BEGIN
         执行部分: 过程及SQL 语句 , 即程序的主要部分 【执行部分是必须的】
      EXCEPTION
          执行异常部分: 错误处理
     END ;
    
     打开输出缓冲区命令:  SET  serveroutput  ON ;
    
      PL /SQL示例: 
          BEGIN  
           dbms_output.put_line(  'Hello world!' ); 
          END ;
     DECLARE语句中声明的变量,不要与表名或者列名重复,Oracle在执行时会优先与表名和列名匹配从而替代后执行。
      PL /SQL中表名列名不能使用变量进行指定。 【Oracle只会将=右边的变量进行替换】
    
     记录类型:     TYPE  record_type  IS  RECORD (
                  变量1  类型 [  NOT  NULL  ] [:= 默认值],
                  变量2  类型 [  NOT  NULL  ] [:= 默认值],
                  . . . . . .
                  变量n  类型 [  NOT  NULL  ] [:= 默认值]
                  );

      记录类型使用的例子: 
                 DECLARE
           TYPE  test_rec  IS  RECORD (
                Code  VARCHAR2  ( 10 ),
                Name  VARCHAR2  ( 30 )  NOT  NULL  :=’a book’);
             V_book test_rec;
              V_book2 test_rec;
        BEGIN
            V_book.code :=’  123 ’;
            V_book.name :=’  C++ Programming’;
            DBMS_OUTPUT.PUT_LINE(v_book.code||v_book.name);
              SELECT  bookCode,bookName  INTO  V_book2.code,V_book2.name  FROM  bookInfo  WHERE  ID = 1  ;
        END ;
     
      使用%  TYPE : 定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%  TYPE
       例: 
                  DECLARE -- 用 %TYPE 类型定义与表相配的字段
        TYPE  t_Record  IS  RECORD (
           T_no emp.empno%  TYPE ,
           T_name emp.ename%  TYPE ,
           T_sal emp.sal%  TYPE
          );
      使用%  ROWTYPE :返回一个记录类型, 其数据类型和数据库表的数据结构相一致。
       例:   
                 DECLARE
            emp1 emp%  ROWTYPE
         BEGIN
             SELECT  ID  , NAME  INTO  emp1  WHERE  ID =  3 ;
         END ;
     
     
      运算符和表达式:   略

      简单循环:(a). Loop循环
                      LOOP
                      要执行的语句;
                      EXIT  WHEN  <条件语句>;  /*条件满足,退出循环语句*/
                    END  LOOP  ;

           例:    DECLARE
                    int  NUMBER  ( 2 ) :=  0 ;
                  BEGIN
                    LOOP
                      int  :=  int  +  1 ;
                     DBMS_OUTPUT.PUT_LINE(  'int 的当前值为:'  || int );
                     EXIT  WHEN  int  =  10 ;
                    END  LOOP  ;
                  END ;
     
               (b). While循环
                         WHILE  <布尔表达式>  LOOP
                             要执行的语句;
                           EXIT  WHEN  [条件];    ----条件满足,提前退出循环
                        END  LOOP  ;
               (c).数字式循环
                           FOR  循环计数器  IN  [  REVERSE  ] 下限 .. 上限  LOOP
                             要执行的语句;
                           END  LOOP  ;
                        例:  FOR  k  IN  1 ..10  LOOP
                              dbms_output.put_line(i);
                             END  LOOP  ;     
      
       标号和GOTO:       GOTO  label  ;
                         . . . . . .
                       <<  label >>  /*标号是用<< >>括起来的标识符 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值