一文看懂基本的oracle預定義異常和自定義異常以及oracle異常函數

oracle預定義異常

語法格式如下:

        EXCEPTION
               WHEN exception1 [OR exception2 ...] THEN
               statement1;
               statement2;
               ...
               [WHEN exception3 [OR exception4...] THEN
               statement1;
               statement2
               ...]

直接上代碼:

 DECLARE
  v_deptno dept.deptno%TYPE := &deptno;
  v_dname  dept.dname%TYPE;
  v_str    VARCHAR2(50);
BEGIN
  SELECT dname INTO v_dname FROM dept WHERE deptno >= v_deptno;
  SELECT decode(MOD((40 - length(v_dname)) / 2, 2),
                0,
                lpad('*', (40 - length(v_dname)) / 2, '*'),
                lpad('*', trunc((40 - length(v_dname)) / 2), '*')) ||
         v_dname ||
         decode(MOD((40 - length(v_dname)) / 2, 2),
                0,
                lpad('*', (40 - length(v_dname)) / 2, '*'),
                lpad('*', trunc((40 - length(v_dname)) / 2), '*'))
    INTO v_str
    FROM dual;
  dbms_output.put_line('****************************************');
  dbms_output.put_line(v_str);
  dbms_output.put_line('****************************************');
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    dbms_output.put_line('無錫');
  WHEN TOO_MANY_ROWS THEN
    dbms_output.put_line('鹽城');
  WHEN OTHERS THEN
    NULL;
END;

oracle自定義異常

直接上代碼

DECLARE
  v_deptno NUMBER := 500;
  v_name   VARCHAR2(20) := 'Testing';
  e_invalid_department EXCEPTION;
BEGIN
  UPDATE departments
     SET department_name = v_name
   WHERE department_id = v_deptno;
  IF SQL % NOTFOUND THEN
    RAISE e_invalid_department;
  END IF;
  COMMIT;
EXCEPTION
  WHEN e_invalid_department THEN
    DBMS_OUTPUT.PUT_LINE('No such department id.');
END;

oracle異常函數

直接上代碼

DECLARE
  v_deptno NUMBER := 270;
  v_name   VARCHAR2(20) := 'Testing';
BEGIN
  UPDATE departments
     SET department_name = v_name
   WHERE department_id = v_deptno;
  IF SQL%FOUND THEN
    RAISE_APPLICATION_ERROR(-20001, 'Warning!');
  END IF;
  COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLCODE);
    DBMS_OUTPUT.PUT_LINE(SQLERRM);
    ROLLBACK;
END;

文中代碼參考了一部分墨天輪講座,便於後期回顧,特此記錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章