• 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; 
     


      
  • 相关阅读:
    Android录制音频的三种方式
    LeetCode Maximum Gap
    Android中BroadcastReceiver组件具体解释
    shell命令技巧——文本去重并保持原有顺序
    HDU 1284 钱币兑换问题(全然背包:入门题)
    【物联网云端对接-1】 通过HTTP协议与微软Azure IoT hub进行云端通信
    LoRa无线通信设计(一)原理
    leetCode 77.Combinations (组合)
    USACO4.2.1 网络流最大流算法
    [error:没有解析库]Couldn't find a tree builder with the features you requested: xml. Do you need to install a parser library?
  • 原文地址:https://www.cnblogs.com/t0404/p/10291066.html
Copyright © 2020-2023  润新知