分享
 
 
 

PL/SQL的一些语法

王朝mssql·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

写一些关于PL/SQL的语法,免得等到用到的时候还要去乱翻。

1。控制流程(if,while)

2。循环(for)

3。游标(cursor)

4。异常处理(exception)

1。控制流程()

A.条件语句

IF THEN

PL/SQL

END IF;

IF THEN

PL/SQL

ELSE

PL/SQL

END IF;

IF THEN

PL/SQL

ELSIF THEN

PL/SQL

END IF;

2。循环

A.simple loop

LOOP

SQL

EXIT WHEN ;

END LOOP;

LOOP

SQL

IF THEN

EXIT;

END IF;

END LOOP;

B.While loop

WHILE

LOOP

SQL

END LOOP;

C.For loop

FOR $counter in $low .. $high LOOP

SQL

END LOOP

3。游标

在PL/SQL程序中定义的游标叫做显式游标。

A.显式游标的处理由四个部分组成:

cursor $cursorname is $Query;

--定义游标

open $cursorname;

--打开游标

fetch $cursorname into $othervariable

--把游标中的东西取出

close $cursorname

--关闭游标

B.游标属性

%found

布尔型属性,当最近一次读纪录成功时,为true.

%nofound

失败时,为false.

%isopen

%rowcount

返回已从游标中读取的记录数。

C.参数化游标

所有的SQL语句在上下文区内部都是可执行的,因此都有一个游标指向上下文区,此游标就是所谓的SQL游标。

与显式游标不同,SQL游标不被程序打开和关闭。

4.异常处理概念

异常处理是用来处理正常执行过程中未预料的事件。如果PL/SQL程序块一旦产生异常而又没有指出如何处理时,程序会自动终止。

异常处理部分放在PL/SQL的后半部分,结构为:

EXCEPTION

WHEN first_exception THEN

WHEN second_exception THEN

WHEN OTHERS THEN

--OTHERS必须放在最后

异常分为预定义和用户定义两种。

用户定义的异常是通过显式使用RAISE语句来引发。如

DECLARE

e_TooManyStudents EXCEPTION;

-- 类型为Exception,用于指示错误条件

v_CurrentStudents NUMBER(3);

-- HIS-101学生注册当前号

v_MaxStudents NUMBER(3);

-- HIS-101学生注册允许的最大号

BEGIN

/* 找出注册学生当前号和允许的最大号 */

SELECT current_students, max_students

INTO v_CurrentStudents, v_MaxStudents

FROM classes

WHERE department = 'HIS' AND course = 101;

/* 检查学生的号 */

IF v_CurrentStudents > v_MaxStudents THEN

/* 太多的学生注册,则触发例外处理 */

RAISE e_TooManyStudents;

END IF;

EXCEPTION

WHEN e_TooManyStudents THEN

/* 当太多的学生注册,就插入信息解释发生过错误 */

INSERT INTO log_table (info) VALUES ('History 101 has ' || v_CurrentStudents ||

'students: max allowed is ' || v_MaxStudents);

END;

END;

用户定义的的异常处理

可以使用RAISE_APPLICATION_ERROR来创建自己的错误处理:

RAISE_APPLICATION_ERROR(error_number,error_message,[keep_errors]);

其中error_number是从-20000到-20999之间的参数;error_message是相应的提示信息,小于512字节。如:

CREATE OR REPLACE PROCEDURE Register (

p_StudentID IN students.id%TYPE,

p_Department IN classes.department%TYPE,

p_Course IN classes.course%TYPE) AS

v_CurrentStudents NUMBER;

-- 班上学生的当前号

v_MaxStudents NUMBER;

-- 班上学生的最大号

BEGIN

/* 找出学生的当前号和最大号 */

SELECT current_students, max_students

INTO v_CurrentStudents, v_MaxStudents

FROM classes

WHERE course = p_Course

AND department = p_Department;

/* 确认另外的学生是否有足够的教室*/

IF v_CurrentStudents + 1 > v_MaxStudents THEN

RAISE_APPLICATION_ERROR(-20000, 'Can''t add more students to ' ||

p_Department || ' ' || p_Course);

END IF;

/* 加一个学生在本班 */

ClassPackage.AddStudent(p_StudentID, p_Department, p_Course);

EXCEPTION

WHEN NO_DATA_FOUND THEN

RAISE_APPLICATION_ERROR(-20001, p_Department || ' ' || p_Course ||

' doesn''t exist!');

END Register;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有