文档详情

第14章PLSQL程序设计.ppt

发布:2016-08-06约5.43万字共263页下载文档
文本预览下载声明
2007-9 东北大学东软信息学院计算机系 * 1303 2007-9 东北大学东软信息学院计算机系 * 内层出现异常:no data found 1301 2007-9 东北大学东软信息学院计算机系 * 内层出现异常:too many rows 2007-9 东北大学东软信息学院计算机系 * 2007-9 东北大学东软信息学院计算机系 * 1201 2007-9 东北大学东软信息学院计算机系 * * 无需定义循环变量 无需定义游标 查询结果可以是多行 BEGIN FOR v_emp IN (select * from emp where deptno=10) LOOP DBMS_OUTPUT.PUT_LINE( v_emp.empno|| || v_emp.ename); END LOOP; END; 隐式FOR游标 * 预定义的异常 异常情况名 错误代码 描述 CURSOR_ALREADY_OPEN ORA-06511 尝试打开已经打开的游标 INVALID_CURSOR ORA-01001 不合法的游标操作(如要打开已经关闭的游标) NO_DATA_FOUND ORA-01403 没有发现数据( SELECT INTO ) TOO_MANY_ROWS ORA-01422 返回了多行数据(SELECT INTO) INVALID_NUMBER ORA-01722 转换成数字失败 (‘X’) VALUE_ERROR ORA-06502 截断、算法或转换错误,通常出现在赋值错误 ZERO_DIVIDE ORA-01476 除数为0 ROWTYPE_MISMATCH ORA-06504 主机游标变量与PL/SQL游标变量类型不匹配 * 如何判定字符串是合法数字? DECLARE V_INPUT VARCHAR2(2):=AB; V_EMPNO NUMBER; V_EMP EMP%ROWTYPE; BEGIN V_EMPNO:=TO_NUMBER(V_INPUT); SELECT * INTO V_EMP FROM EMP WHERE EMPNO=V_INPUT; VALUE_ERROR INVALID_NUMBER * EXCEPTION WHEN VALUE_ERROR THEN DBMS_OUTPUT.PUT_LINE(‘不是数字); WHEN INVALID_NUMBER THEN DBMS_OUTPUT.PUT_LINE(‘不是数字); END; * 查询名为SMITH的员工工资,如该员工不存在,则输出“There is not such an employee!”;如存在多个同名的员工,则输出所有员工号和工资。 DECLARE v_sal emp.sal%type; BEGIN SELECT sal INTO v_sal FROM emp WHERE ename=SMITH; DBMS_OUTPUT.PUT_LINE(v_sal); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(There is not such an emplyee!); WHEN TOO_MANY_ROWS THEN FOR v_emp IN (SELECT * FROM emp WHERE ename=SMITH) LOOP DBMS_OUTPUT.PUT_LINE(v_emp.empno|| ||v_emp.sal); END LOOP; END; 预定义异常及其处理 * 动态SQL EXEC IMMEDIATE … USING … INTO … 什么时候用?在SQL语句中: 来源表不确定 目标字段不确定 查询条件不确定: select * from emp “where sal1000” 还是 “where sal1000” “where sal1000” 还是 “where sal2000” * 理论课 考试时间:闭卷,120分钟 题型分布 选择:1分 X 14 判断:1分X 10 名词解释:5分X 4 简答:6分X 6 写命令(若干小题):20分X 1 * 关系数据库的完整性约束: 实体完整性:主键 参照完整性:外键 用户定义完整性:(值)域 使用SCOTT用户登录SQL *PLUS的过程 conn / as sysdba alter user scott account unlock; conn scott/tig
显示全部
相似文档