Oracle存儲(chǔ)過程基本語法:
為巫溪等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及巫溪網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、巫溪網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
CREATE?OR?REPLACE?PROCEDURE?存儲(chǔ)過程名?
IS?
BEGIN?
NULL;?
END;
解釋:
行1:?
CREATE OR REPLACE PROCEDURE 是一個(gè)SQL語句通知Oracle數(shù)據(jù)庫去創(chuàng)建一個(gè)叫做skeleton存儲(chǔ)過程, 如果存在就覆蓋它;?
行2:?
IS關(guān)鍵詞表明后面將跟隨一個(gè)PL/SQL體。?
行3:?
BEGIN關(guān)鍵詞表明PL/SQL體的開始。?
行4:?
NULL PL/SQL語句表明什么事都不做,這句不能刪去,因?yàn)镻L/SQL體中至少需要有一句;?
行5:?
END關(guān)鍵詞表明PL/SQL體的結(jié)束。
oracle 存儲(chǔ)過程的基本語法
1.基本結(jié)構(gòu)
CREATE OR REPLACE PROCEDURE 存儲(chǔ)過程名字
(
參數(shù)1 IN NUMBER,
參數(shù)2 IN NUMBER
) IS
變量1 INTEGER :=0;
變量2 DATE;
BEGIN
END 存儲(chǔ)過程名字
2.SELECT INTO STATEMENT
將select查詢的結(jié)果存入到變量中,可以同時(shí)將多個(gè)列存儲(chǔ)多個(gè)變量中,必須有一條
記錄,否則拋出異常(如果沒有記錄拋出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 變量1,變量2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
...
3.IF 判斷
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;
4.while 循環(huán)
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;
5.變量賦值
V_TEST := 123;
6.用for in 使用cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名1+cur_result.列名2
END;
END LOOP;
END;
7.帶參數(shù)的cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
OPEN C_USER(變量值);
LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
do something
END LOOP;
CLOSE C_USER;
8.用pl/sql developer debug
連接數(shù)據(jù)庫后建立一個(gè)Test WINDOW
在窗口輸入調(diào)用SP的代碼,F9開始debug,CTRL+N單步調(diào)試
給你示例你參考下:
----------------------------建立存儲(chǔ)過程:
CREATE OR REPLACE PROCEDURE P_name--存儲(chǔ)過程名字
(
i_var in int, --輸入?yún)?shù)1
o_var OUT varchar2 --輸出參數(shù)1
)
IS
v_STR VARCHAR2(200); --定義存儲(chǔ)過程內(nèi)部的局部變量
BEGIN
--下面是存儲(chǔ)過程的主體實(shí)現(xiàn)部分
v_STR := i_var;
dbms_output.put_line(v_STR);
o_var := v_STR;
exception--錯(cuò)誤異常處理部分
when others then
dbms_output.put_line(sqlerrm);--打印錯(cuò)誤信息
END P_name;
-----------------------------------調(diào)用存儲(chǔ)過程示例:
declare
v_in int;
v_out varchar2(50);
begin
v_in :=100;
P_name (v_in,v_out); --調(diào)用存儲(chǔ)過程P_name
dbms_output.put_line('存儲(chǔ)過程輸入結(jié)果為:'||v_out);
exception--錯(cuò)誤異常處理部分
when others then
dbms_output.put_line(sqlerrm);--打印錯(cuò)誤信息
end;