雖然之前寫了不少oracle上的sql語句,但是沒有抽出時間對oracle進行乙個系統的學習,實踐固然重要,但沒有乙個理論上的規範學習與理解,在實踐中就不能舉一反三,就不能寫出高規範高質量的sql語句。
-- pl/sql 基本寫法
-- 說明:宣告、異常處理部分為可選,視具體程式而定
declare -- 宣告變數
a integer;-- 只宣告
b float := 0;-- 帶賦值的宣告
c float;
begin -- 可執行語句開始
a := 1.5;
dbms_output.put_line('a=' || a);
dbms_output.put_line('b=' || b);
c := a / b; -- 會引發分母為0的異常,下面的兩條輸出語句將無法執行
dbms_output.put_line('c=' || c);
exception -- 異常處理
when others then
dbms_output.put_line('[pl/sql 基本寫法]中出現異常,錯誤**:ora'||sqlcode);
end; -- 可執行語句結束
/ -- 該符號表示執行這段pl/sql**
執行後的輸出:
a=2b=0
[pl/sql 基本寫法]中出現異常,錯誤**:ora-1476
我們再看一下如何通過異常處理實現資料庫事務:
-- pl/sql 事務
-- 說明:有多條修改資料的語句執行,如果其中某條出錯,之前的更改也不會記入資料庫
-- 1.先建立乙個測試表
declare
v_sql_drop_table varchar2(50) := 'drop table my_test';
v_sql_create_table varchar2(100) := 'create table my_test(not_null varchar2(20) not null, only_int integer)';
begin
execute immediate v_sql_create_table; -- 建立測試表
exception
-- 如果表已存在,則會引發異常
when others then
execute immediate v_sql_drop_table; -- 先刪除
execute immediate v_sql_create_table; -- 再建立
end;
/--2.用我們剛建立的測試表進行測試
declare
v_count integer; -- 表中記錄的行數
v_int_val my_test.only_int%type; -- 使用%type關鍵字參照某錶某欄位型別宣告變數
begin
v_int_val := 123456;
-- 插入一條正確的資料
insert into my_test values ('test_success', v_int_val);
-- 查詢條數為1條,我們發現插入成功了
select count(*) into v_count from my_test;
dbms_output.put_line('my_test表中有' || v_count || '條記錄');
-- 插入一條錯誤的資料,因為第二個欄位為int型,插入字元資料肯定會出錯
insert into my_test values ('test_fail', 'abc');
-- 最後提交更改
commit;
exception
-- 異常處理
when others then
rollback; -- 異常時回滾,這樣第一次插入的正確資料也不會儲存到資料庫
dbms_output.put_line('[pl/sql 事務]中出現異常,錯誤**:ora' || sqlcode);
-- 我們驗證一下表裡的資料為0條
select count(*) into v_count from my_test;
dbms_output.put_line('回滾後,my_test表中有' || v_count || '條記錄');
end; -- 可執行語句結束
/ -- 該符號表示執行這段pl/sql**
執行後的輸出:
my_test表中有1條記錄
[pl/sql 事務]中出現異常,錯誤**:ora-1722
回滾後,my_test表中有0條記錄
【end】
Oracle PLSQL基本操作
declare 應用型變數 emp.sal是什麼型別,那麼通過emp.sal type就可以指明vsal的型別 vsal emp.sal type begin 將值賦給vsal select sal into vsal from emp where empno 7369 列印 dbms output...
oracle pl sql基本語法
pl sql程式語言 pl sql程式語言是對sql語言的擴充套件,使得sql語言具有過程化程式設計的特性。pl sql程式語言比一般的過程化程式語言,更加靈活高效。pl sql程式語言主要用來編寫儲存過程和儲存函式等。宣告方法 賦值操作可以使用 也可以使用into查詢語句賦值 declare i ...
ORACLE PLSQL 基本迴圈(11g)
迴圈原則 如果迴圈內部必須執行一次,則使用基本迴圈 如果知道迴圈次數,則使用for迴圈 如果必須在每次迴圈開始時判斷條件,則使用while迴圈 1 基本迴圈 sql declare 2 i number 0 3 begin 4 loop 5 dbms output.put line i 6 i i ...