plsql(一)

一: plsql结构定义 
 
    PL/SQL(Procedural Language/SQL):过程化编程语言 
 
   Oracle对标准SQL语言的过程化扩充 
 
   用来编写包含SQL语句的程序,加入业务逻辑处理功能。 
 
   PL/SQL程序由块组成,每一个块都包含有PL/SQL和SQL语句。块的结构如下: 
 
       [ 
           declare 变量名  类型;  --声明变量 
变量名 类型; 
        ] 
 
        begin 

          [过程语句] 

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

常用的变量类型有

BINARY_INTEGER :整型数字。主要用于计数而不是用来表示字段类型

NUMBER[(精度,小数位)]:数字类型

CHAR[(长度)]:字长字符串

VARCHAR2[(长度)]:变长字符串

DATE:日期时间类型

TIMESTAMP:时间戳

BOOLEAN:布尔类型。有效值只有TRUE、FALSE、NULL

CLOB、BLOB、BFILE:大对象

简单变量:也叫单值变量

--CONSTANT定义常量

变量名 [CONSTANT] 数据类型 [NOT NULL] [:=默认值];

复合变量:可以存放多个值。也叫组合变量


    举例:      

    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;  --(可以看作键是number类型,值为binary_integer整形的map)
 
       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:='xxx'; 

        jyb.sex:=0; 

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

     end;     
 
列类型和行类型 
 

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

   declare sex_tmp tb_student.sex%type;  --  变量名  表名.列名%type
   

    begin 

      sex_tmp:='1'; 

      syso(sex_tmp); 

    end; 
 

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

   declare student_row tb_student%rowtype; --变量名  表名%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是自定义的存储过程

      syso(sname); 

    end; 

-- plsq中不允许直接出现ddl语句(表对象的crud), 正确使用:execute immedate 'ddl语句'


 四 定义过程的逻辑控制语句   
 
    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;  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值