SQL中調用存儲過程語句:call procedure_name();
注:調用時”()”是不可少的,無論是有參數還是無參數.
定義對數據庫存儲過程的調用時
1、無參數存儲過程:{call procedure_name}
2、僅有輸入參數的存儲過程:{call procedure_name(?,?...)}。
這里?表示輸入參數,創建存儲過程時用in表示輸入參數
3、僅有輸出參數的存儲過程:{call procedure_name(?,?...)}。
這里的?表示輸出參數,創建存儲過程時用out表示輸出參數
4、既有輸入參數又有輸出參數的存儲過程{call procedure_name(?,?...)}。
這里的?有表示輸出參數的,也有表示輸入參數的
下面將會對這4種情況分別舉出實例!!!
1、無參數存儲過程
CREATE
OR
REPLACE
PROCEDURE
stu_proc
AS
-- 聲明語句段
v_name VARCHAR2 ( 20 );
BEGIN
-- 執行語句段
SELECT o.sname INTO v_name FROM student o WHERE o.id = 4 ;
dbms_output.put_line(v_name);
EXCEPTION
-- 異常處理語句段
WHEN NO_DATA_FOUND THEN dbms_output.put_line( ' NO_DATA_FOUND ' );
END ;
-- 聲明語句段
v_name VARCHAR2 ( 20 );
BEGIN
-- 執行語句段
SELECT o.sname INTO v_name FROM student o WHERE o.id = 4 ;
dbms_output.put_line(v_name);
EXCEPTION
-- 異常處理語句段
WHEN NO_DATA_FOUND THEN dbms_output.put_line( ' NO_DATA_FOUND ' );
END ;
2、僅帶入參的存儲過程
CREATE
OR
REPLACE
PROCEDURE
stu_proc(v_id
IN
student.id
%
type)
AS
-- 聲明語句段
v_name varchar2 ( 20 );
BEGIN
-- 執行語句段
SELECT o.sname INTO v_name FROM student o where o.id = v_id;
dbms_output.put_line(v_name);
EXCEPTION
-- 異常處理語句段
WHEN NO_DATA_FOUND THEN dbms_output.put_line( ' NO_DATA_FOUND ' );
END ;
-- 聲明語句段
v_name varchar2 ( 20 );
BEGIN
-- 執行語句段
SELECT o.sname INTO v_name FROM student o where o.id = v_id;
dbms_output.put_line(v_name);
EXCEPTION
-- 異常處理語句段
WHEN NO_DATA_FOUND THEN dbms_output.put_line( ' NO_DATA_FOUND ' );
END ;
3、僅帶出參的存儲過程
--
此種存儲過程不能直接用call來調用,這種情況的調用將在下面oracle函數調用中說明
CREATE OR REPLACE PROCEDURE stu_proc(v_name OUT student.sname % type) AS
-- 聲明語句段
BEGIN
-- 執行語句段
SELECT o.sname INTO v_name FROM student o where o.id = 1 ;
dbms_output.put_line(v_name);
EXCEPTION
-- 異常處理語句段
WHEN NO_DATA_FOUND THEN dbms_output.put_line( ' NO_DATA_FOUND ' );
END ;
CREATE OR REPLACE PROCEDURE stu_proc(v_name OUT student.sname % type) AS
-- 聲明語句段
BEGIN
-- 執行語句段
SELECT o.sname INTO v_name FROM student o where o.id = 1 ;
dbms_output.put_line(v_name);
EXCEPTION
-- 異常處理語句段
WHEN NO_DATA_FOUND THEN dbms_output.put_line( ' NO_DATA_FOUND ' );
END ;
4、帶入參和出參的存儲過程
--
此種存儲過程不能直接用call來調用,這種情況的調用將在下面oracle函數調用中說明
CREATE OR REPLACE PROCEDURE stu_proc(v_id IN student.id % type, v_name OUT student.sname % type) AS
-- 聲明語句段
BEGIN
-- 執行語句段
SELECT o.sname INTO v_name FROM student o where o.id = v_id;
dbms_output.put_line(v_name);
EXCEPTION
-- 異常處理語句段
WHEN NO_DATA_FOUND THEN dbms_output.put_line( ' NO_DATA_FOUND ' );
END ;
CREATE OR REPLACE PROCEDURE stu_proc(v_id IN student.id % type, v_name OUT student.sname % type) AS
-- 聲明語句段
BEGIN
-- 執行語句段
SELECT o.sname INTO v_name FROM student o where o.id = v_id;
dbms_output.put_line(v_name);
EXCEPTION
-- 異常處理語句段
WHEN NO_DATA_FOUND THEN dbms_output.put_line( ' NO_DATA_FOUND ' );
END ;