ORACLE儲存過程簡明教程

2021-05-25 16:35:36 字數 2634 閱讀 8306

26.1 建立做試驗的表及資料

create table emp_ly as

select * from emp;

說明:注意複製表結構及資料不是sql server裡面的語法select * into emp_ly from emp,這在oracle裡面行不通,當然如果僅複製結構的話使用

create table emp_ly as

select * from emp

where 1<>1;

即可。26.2建立乙個儲存過程用來做試驗

create or replace procedure sal_raise(emp_no number,shuliang number)

asbegin

update emp_ly set sal=sal + shuliang where empno=emp_no;

end;

/說明:一定不能少begin end;這兩個關鍵字,不然建立儲存過程會有提示

warning: procedure created with compilation errors

意思是:警告,儲存過程雖然建立了,但是有編譯錯誤。

檢視執行錯誤可以輸入 show errors;

儲存過程的宣告引數型別時不能帶長度,精度或者範圍,比如這個儲存過程emp_no number這個引數,就不能宣告為emp_no number(4),同理,varchar2作為引數的型別是可以的,但是以varchar2(10)作為引數型別是不行的。

在sql plus裡面建立儲存過程,最後乙個反斜線不能少,這是告訴編譯器執行這個pl/sql塊,但是在pl/sql developer的sql window建立則不需要這個反斜線,選擇輸入的**按f8鍵執行即可,缺點是編譯出錯不會提示。

26.3 呼叫儲存過程

a.在儲存過程或者觸發器中呼叫儲存過程

使用儲存過程名和引數即可,比如sal_raise(7369,200);

b. 從互動式oracle工具中呼叫儲存過程

在sql plus中呼叫,可以使用匿名塊的方式呼叫,如

begin

sal_raise(7369,200);

end;

/還可以使用execute或者call的語法呼叫,如

execute sal_raise(7369,200);

call sal_raise(7369,200);

值得注意的是,在sql plus中執行完了,如果沒有輸入明確的commit;命令資料是不會實際寫到表的,但是在sql window視窗中只能通過

begin

sal_raise(emp_no=>7369,shuliang=>200);

end;

方式呼叫儲存過程,而且執行結果不需要輸入commit;命令也會直接寫入表。

26.4傳入儲存過程引數的三種方法:

execute sal_raise(7369,200);   

execute sal_raise(shuliang=>200, emp_no=>7369);

execute sal_raise(7369,shuliang=>200);

第一種為常用方法,傳入引數順序和儲存過程宣告引數順序一樣

第二種為引數名稱和引數值一一對應法,可以不按照儲存過程宣告引數順序傳入。

第三種為混合法,要求沒有引數名稱的值要寫在前面,還需要按照宣告引數的順序才行,比如execute sal_raise(200,emp_no=>7369);就是不行的。

26.5 檢視儲存過程**

如果檢視儲存過程的所有者,建立時間,是否有效等資訊可以使用如下語句:

select * from all_objects where object_name='sal_raise';

如果要檢視儲存過程的**,則可以使用如下**:

select text from all_source where name='sal_raise' order by line;

請一定注意的是:上面著兩個sql要有記錄返回,一定要將儲存過程的名字全部用大寫,否則會沒有記錄返回。

26.6 帶輸出引數的儲存過程

稍微改造下成為帶輸出引數的儲存過程:

create or replace procedure sal_raise(emp_no number,shuliang number,sal_now out number)

asbegin

update emp_ly set sal=sal + shuliang where empno=emp_no;

select sal into sal_now from emp_ly where empno=emp_no;

end;

呼叫方法和不帶輸出引數的儲存過程差不多,只不過需要宣告乙個合適型別的變數來接收輸出引數而已。

set serveroutput on; --主要用於後面的dbms_output要顯示結果

declare sal_now number;

begin

sal_raise(7369,200,sal_now);

dbms_output.put_line(to_char(sal_now));

end;

26.5 刪除儲存過程

drop procedure sal_raise

2.sql reference

來自羅勇的部落格

InnoDB儲存引擎簡明教程(三)

innodb關鍵特性 插入緩衝 instsert buffer 兩次寫 double write 自適應雜湊索引 adaptive hash index 非同步io async io 重新整理鄰接頁 flush neighbor page 1.insert buffer insert buffer和...

Visual Unit 簡明教程

visual unit,簡稱vu,是新一代單元測試工具,功能強大,使用簡單,完全視覺化,不需編寫測試 vu的測試結果使程式行為一目了然,有助於整理程式設計思路,提高程式設計效率和正確性,並能快速排錯 vu還增強偵錯程式功能 如自由後退 用例切換 提高除錯的效率 vu能達到空前的測試完整性,輕鬆完成語...

MYSQL簡明教程

dos進入mysql命令 c mysql h 127.0.0.1 u root p enter password mysql 進入完成 建立資料庫 create database databasename 使用指定資料庫進行操作 方法1 use database databasename 方法2 m...