- 1、本文档共93页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[IT认证]PLSQL的简介6
例:查找classes表中历史系101课程的当前学生数与最大学生数,比较这两个数,如果当前学生数超过最大学生数是不允许的,就触发错误。当这种错误发生时,往log_table表中插入一条记录。 declare e_toomanystudent exception; /*定义错误名*/ v_currentstudent number(3); v_maxstudent number(3); v_errorcode number; v_errortext varchar2(200); begin select current_student,max_students into v_currentstudent,v_maxstudent from classes where department=’HIS’ and course=101; if v_currentstudent v_maxstudent then raise e_toomanystudent; /*触发错误*/ end if; exception when no_data_found or too_many_rows then dbms_output.put_line(‘发生系统预定义错误’); when e_toomanystudent then /*处理错误*/ insert into log_table(info) values(‘history 101 has ‘||v_currentstudent); when others then v_errorcode:=sqlcode; v_errortext:=substr(sqlerrm,1,200); insert into log_table(code,message,info) values(v_errorcode,v_errortext,’Oracle error occured’); end; / 第五节:游标 PL/SQL中SELECT语句必须带INTO子句,将查询结果INTO到相应的变量中,然后再将变量的值输出。但这种SELECT… INTO语句只能返回一条记录。如果SELECT… INTO语句返回多条记录,就会产生系统预定义错误too_many_rows。为了解决此问题,必须使用游标。 游标有两种类型:显式游标、隐式游标。 例:举例说明条件语句的用法 DECLARE V_sal emp.sal%type; BEGIN SELECT sal into v_sal from emp where empno=7788; IF v_sal500 THEN UPDATE emp set sal=sal*1.5 where empno=7788; ELSIF v_sal1500 THEN UPDATE emp set sal=sal*1.3 where empno=7788; ELSIF v_sal3000 THEN UPDATE emp set sal=sal*1.1 where empno=7788; ELSE UPDATE emp set sal=sal*1.0 where empno=7788; END IF; COMMIT; END; / 2、CASE语句 CASE语句有下列两种格式: 含selector的CASE语句、搜索CASE语句 (1)含selector 的CASE语句 语法格式如下: [label_name] CASE selector WHEN 表达式1 THEN 语句序列1; WHEN 表达式2 THEN 语句序列2; ... WHEN 表达式N THEN 语句序列N; [ELSE 语句序列N+1;] END CASE [label_name]; 例:用CASE语句判断GRADE变量的值是否等于A、B、C、D、F,并分别处理。 CASE grade WHEN A THEN dbms_output.put_line(Excellent); WHEN B THEN dbms_output.put_line(Very Good); WHEN C THEN dbms_output.put_line(Good); WHEN D T
文档评论(0)