oracle中PL/SQL详解(一)

来源:互联网 发布:ssh酒店管理系统源码 编辑:程序博客网 时间:2024/05/18 18:16
 

PL/SQL编程

  PL/SQL是oracle的专用语言,它对标准的SQL语言的扩展.SQL语句可以嵌套在PL/SQL语言中,并结合处理语句。

 

PL/SQL程序结构

  使用了程序块的结构组织的代码.最简单的程序块是一种被称为”匿名块”的程序块,匿名块是指不会被oracle存储并且不能够重用程序块。

PL/SQL程序通常包括3部分:Declare部分、exception部分、Begin和end部分.

Begin和end是PL/SQL的必须部分,总是begin开始end结束.

 

Declare部分包含定义变量、常量和游标等类型的代码.

 

Begin与end之间可以嵌套begin与end及exception.

 

//打开服务器的输出

SQL> set serveroutput on;

SQL> begin //开始

  2  dbms_output.put_line('Hello World');

  3  end;

  4  /

变量与常量的声明:

     变量名  类型(字符,日期,数字,布尔)[:=缺省值];

     常量名 constant 类型(字符,日期,数字,布尔) [:=缺省值];

 

变量与常量的区别:

     变量可以在任何部分进行赋值.

     而常量在declare中声明并且赋值.

注意:都是在declare中声明

几种声明变量的方法:

 Var1 char(15);

Married Boolean :=true;

Psal number(7,2);

My_name emp.ename%type;

Emp_rec  emp%rowtype;

记录变量分量的引用

 Emp rec.ename:=’ADAMS’;

 

正确的操作:

declare

    pagesize constant number(2) :=10;

begin

    dbms_output.put_line(pagesize);

end;

/

 

作用域:

   是能够引用变量名称这样的标识符的程序块。

    

declare

   pagesize number(2):=10;  //在整个中都有效

begin

   dbms_output.put_line(pagesize);

   declare

   pagesize number(2):=99; //只是在内容声明部分到end结束有效

    begin

    dbms_output.put_line(pagesize);

    end;

end;

/

 

 

 

//声明一个整型的变量

SQL> declare

  2   age number(2);

  3  begin

  4  age:=90;

  5  dbms_output.put_line(age);

  6  end;

  7  /

//声明后直接赋值

SQL> declare

  2   age number(2) :=90;

  3  begin

  4  dbms_output.put_line(age);

  5  end;

  6  /

//捕获异常处理

SQL> declare

  2  age number(2);

  3  begin

  4  age :='qwe'

  5  ;

  6  exception

  7  when others then

  8  dbms_output.put_line('赋值失败');

  9  end;

 10  /

 

 

条件判断语句

  有if与case语句

  

  If语句

If语法

   If(expression1)then pl/sql_statement

   Else

        Pl/sql_statement;

   End if;

  

If(expression1)then pl/sql_statement

   Else if(expression2)

        Pl/sql_statement;

   Else

        Pl/sql_statement;

   End if;

  

 

 Case语句

     从oracle9i以后引入

     Case <selector>

        When <expression1> then pl/sql_statement1;

        When <expression2> then pl/sql_statement2;

        …….

        [else  pl/sql_statement;]

     End;

//案例

declare

pnum number:=10;

begin

if pnum>10 then

dbms_output.put_line('变量值大于10');

elsif pnum=10 then

dbms_output.put_line('变量值等于10');

else

dbms_output.put_line('变量值小于10');

end if;

end;

 

//第一步先运行输入

accept num prompt '请输入一个数字';

第二步:

declare

pnum number:=&num;

begin

if pnum>10 then

dbms_output.put_line('变量值大于10');

elsif pnum=10 then

dbms_output.put_line('变量值等于10');

else

dbms_output.put_line('变量值小于10');

end if;

end;

SQL> declare score number(2) :=80;

   begin

       if score>70 then dbms_output.put_line('成绩合格');

   end if;

   end;

  /

 

SQL> declare score number(2) :=80;

   begin if score>90 then dbms_output.put_line('成绩合格');

 else dbms_output.put_line('成绩不合格');

end if;

end;

/

 

成绩不合格

 

 

SQL> declare score number(2):=8;

begin

case score

when 9 then dbms_output.put_line('成绩优秀');

when 8 then dbms_output.put_line('成绩亮');

end case;

end;

 /

 

循环语句

  最基本的循环称为无条件循环,如果没有指定exit语句,循环将无条件执行,这种循环称为死循环,死循环尽量避免。

语法格式如下:

     Loop

       ---statement---

 Exit when condition

 End loop;

 

案例:

SQL> declare

      i number(2):=1;

       begin

            loop

              dbms_output.put_line(i);

                   i:=i+1;

          exit when i>10;

          end loop;

          end;

   /

 

While循环

    语法:

    While condition

         Loop

           Statement;

        End loop;

 

SQL> declare

     i number(2):=1;

         begin

           while i<10   

              loop dbms_output.put_line(i);

                i:=i+1;

             end loop;

          end;

  /

 

For循环

     For loop_control_variable in [reverse] lower upper loop

          Statement;

        End loop;

 

  SQL> begin

         for i in 1..10

            loop

            dbms_output.put_line(i);

           end loop;

       end;

      /

原创粉丝点击