oracle 存儲過程的基本語法
1.基本結構
CREATE OR REPLACE PROCEDURE 存儲過程名字
(
參數1 IN NUMBER,
參數2 IN NUMBER
) IS
變量1 INTEGER :=0;
變量2 DATE;
BEGIN
END 存儲過程名字
2.SELECT INTO STATEMENT
將select查詢的結果存入到變量中,可以同時將多個列存儲多個變量中,必須有一條
記錄,否則拋出異常(如果沒有記錄拋出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 循環
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.帶參數的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
連接數據庫後建立一個Test WINDOW
在視窗輸入調用SP的代碼,F9開始debug,CTRL+N單步調試
2.Oracle數據庫的存儲過程怎麼寫Oracle存儲過程基本語法:
CREATE OR REPLACE PROCEDURE 存儲過程名
IS
BEGIN
NULL;
END;解釋:
行1:
CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle數據庫去創建一個叫做skeleton存儲過程, 如果存在就覆蓋它;
行2:
IS關鍵詞表明後面將跟隨一個PL/SQL體。
行3:
BEGIN關鍵詞表明PL/SQL體的開始。
行4:
NULL PL/SQL語句表明什麼事都不做,這句不能刪去,因爲PL/SQL體中至少需要有一句;
行5:
END關鍵詞表明PL/SQL體的結束。
3.oracle存儲過程怎麼寫一、無參程序過程語法
create or replace procedure NoParPro
as ;
begin
;
exception //存儲過程異常
;
end;
二、帶參存儲過程實例
create or replace procedure queryempname(sfindno emp.empno%type) as
sName emp.ename%type;
sjob emp.job%type;
begin
.
exception
.
end;
三、帶參數存儲過程含賦值方式
create or replace procedure runbyparmeters (isal in emp.sal%type, sname out varchar,sjob in out varchar)
as icount number;
begin
select count(*) into icount from emp where sal>isal and job=sjob;
if icount=1 then
.
else
.
end if;
exception
when too_many_rows then
DBMS_OUtpUT.PUT_LINE('返回值多於1行');
when others then
DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS過程中出錯!');
end;
在Oracle中對存儲過程的調用
過程調用方式一
declare
realsal emp.sal%type;
realname varchar(40);
realjob varchar(40);
begin //存儲過程調用開始
realsal:=1100;
realname:='';
realjob:='CLERK';
runbyparmeters(realsal,realname,realjob); --必須按順序
DBMS_OUTPUT.PUT_LINE(REALNAME||' '||REALJOB);
END; //過程調用結束
過程調用方式二
declare
realsal emp.sal%type;
realname varchar(40);
realjob varchar(40);
begin //過程調用開始
realsal:=1100;
realname:='';
realjob:='CLERK';
runbyparmeters(sname=>realname,isal=>realsal,sjob=>realjob); --指定值對應變量順序可變
DBMS_OUTPUT.PUT_LINE(REALNAME||' '||REALJOB);
END; //過程調用結束
給你參考一下,希望對你有所幫助
祝你好運
4.oracle怎麼寫存儲過程給你示例你參考下:
----------------------------建立存儲過程:
CREATE OR REPLACE PROCEDURE P_name--存儲過程名字
(
i_var in int, --輸入參數1
o_var OUT varchar2 --輸出參數1
)
IS
v_STR VARCHAR2(200); --定義存儲過程內部的局部變量
BEGIN
--下面是存儲過程的主體實現部分
v_STR := i_var;
dbms_output.put_line(v_STR);
o_var := v_STR;
exception--錯誤異常處理部分
when others then
dbms_output.put_line(sqlerrm);--打印錯誤資訊
END P_name;
-----------------------------------調用存儲過程示例:
declare
v_in int;
v_out varchar2(50);
begin
v_in :=100;
P_name (v_in,v_out); --調用存儲過程P_name
dbms_output.put_line('存儲過程輸入結果爲:'||v_out);
exception--錯誤異常處理部分
when others then
dbms_output.put_line(sqlerrm);--打印錯誤資訊
end;
5.oracle 存儲過程怎麼寫~create or replace procedure 存儲過程名(param1 in type,param2 out type)
as
變量1 類型(值範圍); --vs_msg VARCHAR2(4000);
變量2 類型(值範圍);
Begin
Select count(*) into 變量1 from 表A where列名=param1;
If (判斷條件) then
Select 列名 into 變量2 from 表A where列名=param1;
Dbms_output。Put_line('打印資訊');
Elsif (判斷條件) then
Dbms_output。Put_line('打印資訊');
Else
Raise 異常名(NO_DATA_FOUND);
End if;
Exception
When others then
Rollback;
End;
6.oracle存儲過程並且怎麼寫一、無參程序過程語法 create or replace procedure noparpro as ; begin ; exception //存儲過程異常 ; end; 二、帶參存儲過程實例 create or replace procedure queryempname(sfindno emp.empno%type) as sname emp.ename%type; sjob emp.job%type; begin 。
. exception 。. end; 三、帶參數存儲過程含賦值方式 create or replace procedure runbyparmeters (isal in emp.sal%type, sname out varchar,sjob in out varchar) as icount number; begin select count(*) into icount from emp where sal>isal and job=sjob; if icount=1 then 。
. else 。. end if; exception when too_many_rows then dbms_output.put_line('返回值多於1行'); when others then dbms_output.put_line('在runbyparmeters過程中出錯!'); end; 在oracle中對存儲過程的調用 過程調用方式一 declare realsal emp.sal%type; realname varchar(40); realjob varchar(40); begin //存儲過程調用開始 realsal:=1100; realname:=''; realjob:='clerk'; runbyparmeters(realsal,realname,realjob); --必須按順序 dbms_output.put_line(realname||' '||realjob); end; //過程調用結束 過程調用方式二 declare realsal emp.sal%type; realname varchar(40); realjob varchar(40); begin //過程調用開始 realsal:=1100; realname:=''; realjob:='clerk'; runbyparmeters(sname=>realname,isal=>realsal,sjob=>realjob); --指定值對應變量順序可變 dbms_output.put_line(realname||' '||realjob); end; //過程調用結束 給你參考一下,希望對你有所幫助 祝你好運。
7.Oracle存儲過程如何編寫JDBC調用存儲過程: CallableStatement在Java裏面調用存儲過程,寫法那是相當的固定:Class.forName(。.Connection conn = DriverManager.getConnection(。./***p是要調用的存儲過程的名字,存儲過程的4個參數,用4個?號佔位符代替*其餘地方寫法固定*/CallableStatement cstmt = conn.prepareCall("{call p(?,?,?,?)}");/***告訴JDBC,這些個參數,哪些是輸出參數,輸出參數的類型用java.sql.Types來指定*下面的意思是,第3個?和第4個?是輸出參數,類型是INTEGER的*Types後面具體寫什麼類型,得看你的存儲過程參數怎麼定義的*/cstmt.registerOutParameter(3, Types.INTEGER);cstmt.registerOutParameter(4, Types.INTEGER);/***p是要調用的存儲過程的名字,存儲過程的4個參數,用4個?號佔位符代替*其餘地方寫法固定*/CallableStatement cstmt = conn.prepareCall("{call p(?,?,?,?)}");/***在我這裏第1個?和第2個?是輸入參數,第3個是輸出參數,第4個既輸入又輸出*下面是設定他們的值,第一個設爲3,第二個設爲4,第4個設定爲5*沒設第3個,因爲它是輸出參數*/cstmt.setInt(1, 3);cstmt.setInt(2, 4);cstmt.setInt(4, 5);//執行cstmt.execute();//把第3個參數的值當成int類型拿出來int three = cstmt.getInt(3);System.out.println(three);//把第4個參數的值當成int類型拿出來int four = cstmt.getInt(4);System.out.println(four);//用完別忘給人家關了,後開的先關cstmt.close();conn.close();JDBC調用存儲過程,掌握這一個程序足夠了.以下是上面程序使用的存儲過程的代碼,我用的是Oracle數據庫,不過不論是什麼數據庫,對於你的程序,JDBC這一端寫法都是一樣的.create or replace procedure p(v_a in number,v_b number,v_ret out number,v_temp in out number)isbeginif(v_a > v_b) thenv_ret := v_a;elsev_ret := v_b;end if;v_temp := v_temp + 1;end;