zoukankan      html  css  js  c++  java
  • 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; 
     


      
  • 相关阅读:
    uva 147 Dollars
    hdu 2069 Coin Change(完全背包)
    hdu 1708 Fibonacci String
    hdu 1568 Fibonacci
    hdu 1316 How Many Fibs?
    poj 1958 Strange Towers of Hanoi
    poj 3601Tower of Hanoi
    poj 3572 Hanoi Tower
    poj 1920 Towers of Hanoi
    筛选法——素数打表
  • 原文地址:https://www.cnblogs.com/t0404/p/10291066.html
Copyright © 2011-2022 走看看