標籤:
最近工作有點忙,沒什麼時間在上班時間進修一下,自己晚上有時候去打打球,回家看看電視劇,日子一天天過……。前段時間看到公司有用到ORACLE,而我一直都覺的ORACLE對於我來說是很重的,所以這個周末花了點時間學習一些基礎下。
建立無參預存程序
create procedure p_myPro1 isbegin insert into dept(deptno,dname,loc) values(60,‘ccx‘,‘321321‘);end;
修改無參預存程序
create or replace procedure p_myPro1 isbegin insert into dept(deptno,dname,loc) values(60,‘ccx‘,‘321321‘); end;
建立和修改有參預存程序
create or replace procedure p_myPro2(spName varchar2,newSal number) isbegin update emp set sal=newSal where ename=spName;end;call p_myPro2(‘SCOTT‘,‘1111‘);
查看錯誤資訊
show error;
調用預存程序
調用預存程序的方式有兩種,call,exec
exec是sqlplus的命令,只能在sqlplus中使用。和 set serveroutput on 一起用。call是sql命令,任何工具都可以使用。
例如:call p_myPro1()
Oracle輸出語句過程
dbms_output是oracle所提供的包(類似java的開發包),該包包含一些過程,put_line就是dbms_output包的一個過程。
Oracle變數的使用例子
declarev_ename varchar2(5);v_sal number(7,2);begin select ename,sal into v_ename,v_sal from emp where empno=7369; dbms_output.put_line(‘姓名‘||v_ename||‘ 工資‘||v_sal);end;
Oracle異常捕捉
declarev_ename varchar2(5);v_sal number(7,2);begin select ename,sal into v_ename,v_sal from emp where empno=1111; dbms_output.put_line(‘姓名‘||v_ename||‘ 工資‘||v_sal); exception when no_data_found then dbms_output.put_line(‘SELECT INTO沒有找到資料‘); when not_logged_on then dbms_output.put_line(‘沒有串連到ORACLE‘); end;
錯誤號碼 |
異常錯誤資訊名稱 |
說明 |
ORA-0001 |
Dup_val_on_index |
違反了唯一性限制 |
ORA-0051 |
Timeout-on-resource |
在等待資源時發生逾時 |
ORA-0061 |
Transaction-backed-out |
由於發生死結事務被撤消 |
ORA-1001 |
Invalid-CURSOR |
試圖使用一個無效的遊標 |
ORA-1012 |
Not-logged-on |
沒有串連到ORACLE |
ORA-1017 |
Login-denied |
無效的使用者名稱/口令 |
ORA-1403 |
No_data_found |
SELECT INTO沒有找到資料 |
ORA-1422 |
Too_many_rows |
SELECT INTO 返回多行 |
ORA-1476 |
Zero-divide |
試圖被零除 |
ORA-1722 |
Invalid-NUMBER |
轉換一個數字失敗 |
ORA-6500 |
Storage-error |
記憶體不夠引發的內部錯誤 |
ORA-6501 |
Program-error |
內部錯誤 |
ORA-6502 |
Value-error |
轉換或截斷錯誤 |
ORA-6504 |
Rowtype-mismatch |
宿主遊標變數與 PL/SQL變數有不相容行類型 |
ORA-6511 |
CURSOR-already-OPEN |
試圖開啟一個已處於開啟狀態的遊標 |
ORA-6530 |
Access-INTO-null |
試圖為null 對象的屬性賦值 |
ORA-6531 |
Collection-is-null |
試圖將Exists 以外的集合( collection)方法應用於一個null pl/sql 表上或varray上 |
ORA-6532 |
Subscript-outside-limit |
對嵌套或varray索引得引用超出聲明範圍以外 |
ORA-6533 |
Subscript-beyond-count |
對嵌套或varray 索引得引用大於集合中元素的個數. |
對這種異常情況的處理,只需在PL/SQL塊的異常處理部分,直接引用相應的異常情況名,並對其完成相應的異常錯誤處理即可。
Oracle- 預存程序和異常捕捉