您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        EXCEPTION 
WHEN first_exception THEN 
    statement1;
    ......
WHEN second_exception THEN 
    statement1;
    ......
WHEN OTHERS THEN
    statement1;
    ......
DECLARE
    /*
    *  声明部分--声明变量、常量、复杂数据类型、游标等
    */
BEGIN
    /*
    *  执行部分--PL/SQL语句和SQL语句
    */
EXCEPTION
 /*
 *  异常处理部分--处理运行错误
 */
 END; --块结束标记DECLARE
    v_name emp.ename%TYPE;
    v_sal emp.sal%TYPE;
BEGIN
    SELECT ename, sal INTO v_name, v_sal FROM emp  WHERE empno = &no;
    IF v_sal < 3000 THEN 
        dbms_output.put_line(v_name || '的工资是:' || v_sal);
        END IF;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        dbms_output.put_line('员工号输入错误!');
    WHEN OTHERS THEN 
        dbms_output.put_line('其他错误!');
END;

    DECLARE
        v_name emp.ename%TYPE;
        v_sal emp.sal%TYPE := &salary;
    BEGIN
        SELECT ename INTO v_name FROM emp WHERE sal = v_sal;
        DBMS_OUTPUT.put_line(v_name || '的工资是:' || v_sal);
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            DBMS_OUTPUT.put_line('没有该工资的员工');
        WHEN TOO_MANY_ROWS THEN
            DBMS_OUTPUT.put_line('多个员工具有该工资');
        WHEN OTHERS THEN
            DBMS_OUTPUT.put_line('其他错误');
    END;
1、在PL/SQL块中定义部分定义异常情况:<异常情况> EXCEPTION;
2、将其定义好的异常情况与标准的ORACLE错误联系起来,使用PRAGMA EXCEPTION_INIT语句:PRAGMA EXCEPTION_INIT(<异常情况>, <错误代码>);
3、在PL/SQL块的异常情况处理部分对异常情况做出相应的处理。
BEGIN
    DELETE FROM dept WHERE deptno = &deptno;
EXCEPTION
    WHEN OTHERS THEN
        dbms_output.put_line(SQLCODE || '###' || SQLERRM);
END;-2292###ORA-02292: 违反完整约束条件 (SCOTT.FK_DEPTNO) - 已找到子记录
2、删除dept表中指定部分的信息:
DECLARE
    --1、定义非预定义异常的标识符
    e_fk EXCEPTION;
    --2、把Oracle错误和异常信息建立关联
    -- -2292 违反外键约束的错误号
    PRAGMA EXCEPTION_INIT(e_fk, -2292);
BEGIN
    DELETE FROM dept WHERE deptno = &deptno;
EXCEPTION
    WHEN e_fk THEN
        -- 3、捕捉并处理异常
        dbms_output.put_line('此部门下有员工,不能删除!');
    WHEN OTHERS THEN
        dbms_output.put_line(SQLCODE || '###' || SQLERRM);
END;   此部门下有员工,不能删除!
DECLARE
    v_empno emp.empno%TYPE := &empno;
    e_no_result EXCEPTION;
BEGIN
    UPDATE emp SET sal = sal + 100 WHERE empno = v_empno;
    IF SQL%NOTFOUND THEN
        RAISE e_no_result;
    ELSE
        COMMIT;
    END IF;
EXCEPTION
    WHEN e_no_result THEN
        dbms_output.put_line('数据更新失败!');
    WHEN OTHERS THEN 
        dbms_output.put_line('其他错误');
END;
DECLARE
    v_empno emp.empno%TYPE := &empno;
    v_ename emp.ename%TYPE := '&ename';
    v_deptno emp.deptno%TYPE := &deptno;
BEGIN
    INSERT INTO emp(empno, ename, deptno) VALUES(v_empno, v_ename, v_deptno);
    IF SQL%FOUND THEN
        DBMS_OUTPUT.put_line('数据插入成功');
        COMMIT; 
    END IF;
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.put_line('错误号:' || SQLCODE);
        DBMS_OUTPUT.put_line('错误信息:' || SQLERRM);
END;  
raise_application_error(error_number, message);免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。