oralce儲存過程的基本語法

2021-06-13 19:37:45 字數 3293 閱讀 2359

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 ***;

exception

when no_data_found then

***x;

end;

...3.if 判斷

if v_test=1 then

begin

do something

end;

end if;

4.while 迴圈

while v_test=1 loop

begin

***x

end;

end loop;

5.變數賦值

v_test := 123;

6.用for in 使用cursor

...is

cursor cur is select * from ***;

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單步除錯

關於oracle儲存過程的若干問題備忘

1.在oracle中,資料表別名不能加as,如:

--正確 as a;

--錯誤

也許,是怕和oracle中的儲存過程中的關鍵字as衝突的問題吧

2.在儲存過程中,select某一字段時,後面必須緊跟into,如果select整個記錄,利用游標的話就另當別論了。

select af.keynode

into kn

=aid

and af.foundationid

=fid;

--有into,正確編譯

select af.keynode

=aid

and af.foundationid

=fid;

--error: pls

-00428: an

into clause

is expected

in this

select statement

3.在利用select...into...語法時,必須先確保資料庫中有該條記錄,否則會報出"no data found"異常。

可以在該語法之前,先利用

select count(*) from 檢視資料庫中是否存在該記錄,如果存在,再利用select...into...

4.在儲存過程中,別名不能和欄位名稱相同,否則雖然編譯可以通過,但在執行階段會報錯

select keynode

into kn

=aid

and foundationid

=fid;

--正確執行

select af.keynode

into kn

where

=and

af.foundationid

=foundationid;

--執行階段報錯,提示

ora -

01422:exact

fetch

returns more than requested

number

of rows

5.在儲存過程中,關於出現null的問題

假設有乙個表a,定義如下:

create

table a(

id varchar2(

50)

primary

keynot

null,

vcount

number(

8) not

null,

bid

varchar2(

50)

notnull

--外來鍵

);

如果在儲存過程中,使用如下語句:

select sum(vcount) into fcount from a

where bid='******';

如果a表中不存在bid="******"的記錄,則fcount=null(即使fcount定義時設定了預設值,如:fcount number(8):=0依然無效,fcount還是會變成null),這樣以後使用fcount時就可能有問題,所以在這裡最好先判斷一下:

if fcount

isnull then

fcount:=0;

end

if;這樣就一切ok了。

6.hibernate呼叫oracle儲存過程

this.pnumbermanager.gethibernatetemplate().execute(

new hibernatecallback()

null;

}});

儲存過程基本語法

儲存過程可以看作是在資料庫中sql語句的集合,通過執行儲存過程來達到對資料庫的操作,它實現功能和sql語句實現的功能是一樣的,但是兩者在語法上有很大不同,下面介紹儲存過程的用法。1 宣告變數 在儲存過程中宣告變數用declare關鍵字語法如下 declare 示例 declare studentid...

oralce儲存過程的作用

定義 儲存過程 stored procedure 是一組為了完成特定功能的sql 語句 集,經編譯後儲存在資料庫中。使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。儲存過程是資料庫中的乙個重要 物件,任何乙個設計良好的資料庫應用程式都應該用到儲存過程。儲存過程是由流控制和s...

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查詢的結果存...