plsql结构定义,复合类型,行类型和列类型,逻辑控制语句

一:plsql结构定义 
 


    PL/SQL(Procedural Language/SQL):过程化编程语言 
 


   Oracle对标准SQL语言的过程化扩充 
 


   用来编写包含SQL语句的程序,加入业务逻辑处理功能。 
 


   PL/SQL程序由块组成,每一个块都包含有PL/SQL和SQL语句。块的结构如下: 
 


       [ 
 


           declare 变量名  类型;--声明变量 
 


              变量名 类型; 
 


        ] 
 


        begin 
 


          [过程语句] 
 


          [exception when 异常类型 then 过程语句] 
 


        end; 
 


    举例:     
 


    /** 
 


      等价 
 


     { 
 


         System.out.println('helloworld') 
 


      } 
 


    **/ 
 


    begin   --等价于{ 
 


       dbms_output.put_line('helloworld'); 
 


    end;    --等价于} 
 


     
 


    --带变量的plsql定义 
 


   declare userid number; 
 


    begin 
 


      --变量的赋值 可以通过 变量名:=值 
 


     userid:=1; 
 


      dbms_output.put_line(userid); 
 


    end; 
 


    --带异常的plsql定义 
 


   declare userid number; 
 


    begin 
 


      --变量的赋值 可以通过 变量名:=值 
 


     userid:=1/1; 
 


      dbms_output.put_line(userid); 
 


      --异常的定义  when 异常类型  then 异常处理的代码块 
 


     exception when others then 
 


         dbms_output.put_line('出现异常'); 
 


    end; 
 


二 :复合类型 
 


   --在过程中调用函数和存储过程 
 


declare curdate date:=sysdate; 
 


curDateStr varchar2(10); 
 


begin 
 


   curDateStr:=to_char(curdate,'yyyy-MM-dd'); 
 


   dbms_output.put_line(curDateStr); 
 


end; 
 


--在过程中定义复合类型 
 


   1>数组类型 
 


   declare  
 


     type ArrayList is table of number index by binary_integer; 
 


     ua ArrayList; 
 


    begin 
 


      ua(0):=12; 
 


      ua(-1):=20; 
 


      dbms_output.put_line(ua(0)); 
 


    end; 
 


    2>定义复合类型的对象类型  使用对象的成员可以使用 对象.属性名称访问 
 


   declare  
 


     type userinfo is record( 
 


        userid number, 
 


        userName varchar2(20), 
 


        sex number 
 


     ); 
 


     jyb userinfo; 
 


     begin 
 


        jyb.userid:=1; 
 


        jyb.userName:='蒋永兵'; 
 


        jyb.sex:=0; 
 


        dbms_output.put_line(jyb.userName||'的用户id是:'||jyb.userid); 
 


     end;     
 


三 列类型和行类型 
 


   --定义列类型 通过获取表的列类型给当前变量 
 


   declare sex_tmp tb_student.sex%type; 
 


    begin 
 


      sex_tmp:='1'; 
 


      syso(sex_tmp); 
 


    end; 
 


    --行类型 通过select into语句抓取一行 
 


   declare student_row tb_student%rowtype; 
 


    sname varchar2(20); 
 


    begin 
 


       --select into用于在过程语句中将表中的数据抓取到变量中    
 


       --这里是抓取行 
 


      select * into student_row from tb_student where sid=1; 
 


       --抓取行中的某一列到变量 
 


      select sname into sname from tb_student where sid=1; 
 


       syso(student_row.sname); 
 


       syso(sname); 
 


    end; 
 


 四 定义过程的逻辑控制语句   
 


    1>if逻辑控制语句 
 


   declare sex number:=3; 
 


    begin 
 


       if (sex=0) then 
 


          syso('男'); 
 


       elsif(sex=1) then 
 


          syso('女'); 
 


       else 
 


          syso('不男不女'); 
 


       end if; 
 


    end; 
 


    2>循环 
 


   --loop循环 相对于java的do while循环 
 


   declare num number:=1; 
 


    begin 
 


      loop  
 


         syso(num); 
 


         num:=num+1; 
 


         exit when num=11; 
 


      end loop; 
 


    end; 
 


    --while循环 相对于java的while循环 
 


   declare num number:=1; 
 


    begin 
 


       while (num<=10)loop  
 


         syso(num); 
 


         num:=num+1; 
 


      end loop; 
 


    end; 
 


    --for循环 相对于java的for循环 reverse表示反转输出 
 


   declare num number:=1; 
 


    begin 
 


       for i in  1..10 loop  
 


         syso(i); 
 


      end loop; 
 


    end; 
 


    --隐式游标方式的循环 用于循环迭代表记录 
 


   begin 
 


       for stu_tmp in (select * from tb_student) loop 
 


          syso(stu_tmp.sname); 
 


       end loop; 
 


    end; 
 


  
posted @ 2016-07-01 23:44  人间值得  阅读(441)  评论(0编辑  收藏  举报