PL/SQL基础学习

来源:互联网 发布:知乎专栏怎么写文章 编辑:程序博客网 时间:2024/04/30 19:53
 

PL/SQL块结构

DECLAER

BEGIN

EXCEPTION

EDN;

/

变量声明

一、           变量声明的内容

l        赋予变量适当名称

l        赋予变量正确的数据类型

l        定义变量(标准、记录)

l        控制变量范围

二、           命名规则

l        变量由字符开头

l        可以包含:数字、下划线、‘$’、‘#’等

l        变量长度范围:1~30

l        大小写不区分

l        变量名不可以是系统关键字

 

简单PL/SQL例子:

declare

--定义字符型数据,长度20

x varchar(20);

--定义整型数据,并且对该数据进行赋值

y integer:=123;

--定义字符串型数据,必须指定其长度

z string(20):='this is string';

begin

x:='hello world';

dbms_output.put_line('x的值:'||x||' y的值:'||y||' z的值:'||z);

/*dbms_output.put('x的值:'||x||' y的值:'||y);

dbms_output.new_line;*/

end;

/

默认情况下,oracle的输出服务是关闭的,可以通过下面的指令打开输出服务并且设置输出区的大小。

SET SERVEROUTPUT ON SIZE 10000;

 

上述例子中,dbms_output.put_line();PL的库函数,用于标准输出。

||”双竖线的作用是用来连接不同类型的数据。

如果使用dbms_output.put输出,无结果输出,必须配合使用dbms_output.new_line;才会有结果输出。最多情况使用第一种方式:put_line

--”表示行注释 /* */“表示块注释”。

分支语句

一、            IF分支

IF…THEN

ELSIF…THEN

…ELSE

END IF

举例:

DECLARE

A NUMBER;

B VARCHAR(10);

BEGIN

a:=2;

if a=1 then

b:='A';

elsif a=2 then

b:='B';

else

b:='C';

end if;

dbms_output.put_line(b);

end;

/

二、            CASE分支

CASE

WHEN…THEN…

ELSE

END CASE;

举例:

       DECLARE

A NUMBER;

B VARCHAR(10);

BEGIN

a:=4;

case

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

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

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

else

b:='d';

end case;

dbms_output.put_line(b);

end;

/

循环语句

1.        基本循环(LOOP

LOOP

      

       END LOOP

       使用举例:

       declare

x number;

begin

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

end;

/

其中的判断语句可以做如下替换:exit when x>=3;

2.        WHILE循环

WHILE expression LOOP

END LOOP;

使用举例:

declare

x number;

begin

x:=0;

while x<=3 loop

x:=x+1;

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

end loop;

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

end;

/

3.        FOR循环

FOR counter IN[REVERSE] start_value..end_value LOOP

      

       END LOOP;

       使用举例:

begin

for i in 1..5 loop

dbms_output.put_line(i);

end loop;

end;

/

for reverse i in 1..5 loop中间加入reverse,则for循环从相反的方向执行。

 

4.        GOTO

<<sign>>

      

       If…then

       Goto sign;

使用举例:

declare

x number;

begin

x:=0;

<<repeat_loop>>

x:=x+1;

dbms_output.put_line(x);

if x<3 then

goto repeat_loop;

end if;

end;

/

 

异常处理

(一) 异常:pl/sql中的一个警告或错误的形式都被称为异常。包括:编译时刻错误和运行时刻错误。

(二) 异常分类:系统异常、自定义异常。

系统异常使用举例:

declare

test varchar2(10);

begin

select name into test from person where id = 20;

dbms_output.put_line(test);

exception

when NO_DATA_FOUND THEN

dbms_output.put_line('找不到这样的数据!');

when others then

dbms_output.put_line(‘其他异常!’);

end;

/

       Select子句的查询结果为空的时候,将空值赋给test则会出现NO_DATA_FOUND异常。

       自定义异常使用举例:

       declare

tname varchar(10);

e exception;

begin

select name into tname from person where id=2;

if tname<>'ni' then

raise e;

end if;

dbms_output.put_line(tname);

exception

when e then

dbms_output.put_line('名字错误');

end;

/

自定义异常e,在出现自定义异常时,必须通过条件判断,并且使用raise语句抛出,才能在后面的exception中取得自定义异常。

 

下面给出一些系统预定义异常:

DUP_VAL_ON_INDEX

向有唯一约束的表中插入重复行

NO_DATA_FOUND

在一个SELECT INTO语句中无返回值

TOO_MANY_ROWS

SELECT INTO 语句中返回了多行

VALUE_ERROR

一个算法、转换、截断或大小约束发生错误

ZERO_DIVIDE

发生被零除

 

复合变量:记录

一、           什么是记录

记录是由几个相关值构成的复合变量。常用于支持SELECT语句的返回值。使用记录可以将一行数据看成一个单元进行处理,而不必每一列单独处理。

 

二、           记录的声明

TYPE type_name IS RECORD(

       Variable_name dataType[,

       Variable_name dataType[,

      

);

Real_name type_name;

 

记录使用举例:

Declare

--定义记录 记录名称为myrecord

type myrecord is record(

bid varchar2(10),

bname varchar2(10));

--声明一个此记录类型的变量real_record

real_record myrecord;

begin

select bid,bname into real_record from b where bid='1';

dbms_output.put_line(real_record.bid||','||real_record.bname);

end;

/

       使用b.bid%type可以设定bid的类型与b表中bid字段类型相一致。

bid b.bid%type,

bname b.bname%type

       记录的另外一种声明方式:

declare

myrecord person%rowtype;

begin

select * into myrecord from person where id=1;

dbms_output.put_line(myrecord.id);

end;

/

       使用此方式,可以将记录的字段和类型与指定表中的每行记录的字段及其类型一致

原创粉丝点击