天天看点

PL/SQL笔记

plsql :procedure language 

sql :structure query language

以下为一个简单的plsql:

declare 

              v_i number := 0   注:赋值符号为:= 或default

              v_name varchar2(10) default 'a'

begin  

              insert into t  values(v_i,v_name)

              commit

end

条件语句:

1.  if  .... then 

              .....;

       else

              ......;

       end    if ;

示例:

DECLARE

    a number;

    b varchar2(10);

BEGIN

    a:=2;

    if a = 1 then

     b:='i am a';

    elsif a =2 then 

     b:='i am b';

    else

      b:='i am c';

     end if ;

     dbms_output.put_line('b的值为:'||b);

END;

2. case 

    ...

    end case

    case

         when a=1 then b:='A';

          when a=2 then b:='B';

          when a=3  then b:='C';

      else

           b:='others';

     end case ;

三种循环方式:

 1、基本循环:

        loop

       end loop

    x number;

    x:=0;

   loop

            x:=x+1;

       if x>=3 then 

            exit;

       end if ;

          dbms_output.put_line('内:x='||x);

    end loop;

          dbms_output.put_line('外:x='||x);

示例2:

       exit when x>=3

2、while   条件  loop

         ...

          end loop;

   while x<=3 

     x:=x+1;   

3、for 循环

           for  i IN reverse 1 .. 5   (从大到小递增reverse,默认为从小到大)

     loop        

           dbms_output.put_line('i='||i);

     end loop; 

           dbms_output.put_line('end of for loop');

SQL/PLS异常处理:

EXCEPTION  + 系统、自定义异常

    tname varchar2(10);

    e exception ;

     select dname INTO tname from dept where deptno='10';

if tname<>'B部门'  then

RAISE e;

END IF;

      DBMS_OUTPUT.PUT_LINE(tname);

EXCEPTION

WHEN e THEN 

DBMS_OUTPUT.PUT_LINE('错误,不是需要的B部门');

复合变量定义:

示例1:

DECLARE 

      type myrecord IS RECORD(

          id varchar2(10),

           name varchar2(10)

           );

       real_record myrecord;

       select empno,ename INTO read_record FROM emp where empno = 001;

       DBMS_OUTPUT.PUT_LINE(real_record.id||','||real_record.name)

;

示例2:指定定义的变量类型与原表一样

           name emp.ename%type  申明与对应表的字段一样

示例3:指定定义的的变量与整个表的字段及类型都一样ROWTYEP

      myrec emp%ROWTYEP

       select * INTO myrec FROM emp where empno = 001;

       DBMS_OUTPUT.PUT_LINE(myrec.id||','||myrec.name);

高级plsql应用:

游标(CURSOR):

示例1,显示游标:

   cursor mycur is 

      select * from emp;

      myrecord emp%ROWTYPE;

    open mycur;

          fetch mycur into myrecord;

          while mycur%FOUND 

       loop

           dbms_output.putline(myrecord.empno||','||myrecord.ename);

           fetch mycur INTO myrecord;

        end loop;

     close mycur;

示例2,带参数游标:

    cursor cur_para(id varchar2) is  参数只需给类型,不给精度

     select ename from emp where empno=id ;

    t_name emp.ename%type;

     open cur_para('0001');

             fitch cur_para into t_name;

             exit when cur_para%NOTFOUND;

                  dbms_output.put_line(t_name);

         end loop;

      close cur_para;

示例3,带参数游标2,for 循环:

      cursor cur_para(id varchar2) is 

       select ename from emp where empno=id;

        dbms_output.put_line('×××××结果集为:××××');

for cur in cur_para('001') 

       dbms_output.put_line(cur.ename);

       end loop;

示例4,游标属性ISOPEN:

    cursor cur(id varchar2) is

    select ename from emp where empno=id;

     if cur%isopen then 

        dbms_output.put_line('游标已经被打开');

          open cur('0003');

      end if ;

       fetch cur into t_name;

       close cur;

       dbms_output.put_line(t_name);

示例5,游标属性ROWCOUNT:

     t_name varchar2(10);

     cursor mycur is 

     select dname from dept;

      open mycur

       fetch mycur into t_name;

       exit when mycur%NOTFOUND or mycur%NOTFOUND is NUll;

       dbms_output.put_line ('记录数为:'||mycur%ROWCOUTN);

       close mycur;

示例6,使用游标修改数据:

    cursor cur is

     select dname from dept for update;  注意更改需添加for update

     text varchar2(10);

       fetch cur into text;

        while cur%FOUND 

       update dept set dname=dname||'_t' where current of cur;

存储过程(procedure):

示例1,创建一个简单的过程

CREATE or replace procedure myproc(id in varchar2)

    is 

  name varchar2(10);

   select ename into name from emp where empno=id;

   dbms_output.put_line(name);

END myproc;

示例2,执行一个过程,带参数的存储过程:

    tid varchar2(10);

    tid:='0001';

myproc(tid);

或:

    myproc('0001');

EXECUTE myproc('00001');

glogin 初始化文件:

set serveroutput on

本文转自pimg200551CTO博客,原文链接: http://blog.51cto.com/pimg2005/880492,如需转载请自行联系原作者

下一篇: GHOST