oracle 的函式 儲存過程 游標 簡單例項

2021-08-29 23:59:43 字數 2108 閱讀 3830

首先見乙個test_user表,有四個字段,分別為id,name,age,***.其sql為:

create table test_user

(id    varchar2(40 byte),

name  varchar2(40 byte),

age   integer,

***   varchar2(5 byte)

)1.儲存過程

儲存過程就是作為可執行物件存放在資料庫中的乙個或多個sql命令。舉乙個例項。我們把test_user

表裡的連個字段放到變數中去,其寫法如下

create

orreplace

procedure

test (

aa invarchar2

)isa1

integer:=0

; a2 varchar2(40

); begin

select

age,

***

intoa1,

a2 from

test_user

whereid=

aa;end

test;

2.函式

函式和儲存過程沒有很大的區別,主要有2點:

從返回的引數來看:儲存過程可以返回多個數值,函式只能返回乙個。

從呼叫情況來看:如果在sql中呼叫的話只能使用函式不能用過程。

下面舉乙個簡單的例項,test_user

.age

%type表示所定義的引數和test_user.age欄位的型別相同

,如下:

create

orreplace

function

test_fun

(age 

intest_user

.age

%type,

*** 

intest_user

.***

%type)

return

test_user

.name

%type is

name

test_user

.name

%type;

begin

select

test_user

.name

into

name

from

test_user

where

age=age 

and***

=*** ;

return

name;

exception

when

no_data_found

then

return

' ';

---發生異常返回空

end;

3.游標

游標其實是乙個放入記憶體的臨時表。例項如下:

declare

age test_user.age%type :=0; --定義與表字段相同型別

cursor mycursor is --定義游標

select * from test_user

where ***='女' and name like '%i%';

my_record mycursor%rowtype;  --定義游標記錄型別

counter int :=0;

begin

open mycursor;  --開啟游標

if mycursor%isopen  then  --判斷開啟成功

loop --迴圈獲取記錄集

fetch mycursor into my_record; --獲取游標中的記錄

if mycursor%found then  --游標的found屬性判斷是否有記錄

dbms_output.put_line(my_record.name);

else

exit;

end if;

end loop;

else

dbms_output.put_line('游標沒有開啟');

end if;

close mycursor;

end;

oracle儲存過程,游標

oracle儲存過程,游標 2010 07 07 13 01 create or replace procedure p tb task log is 功能 插入任務到任務日誌表 v task start date date v task end date date v sql code numbe...

oracle 儲存過程 游標

create or replace procedure exception3 as 使用者自定義異常 e too high sal exception 宣告自定義異常 v sal employees.salary type begin select salary into v sal from em...

Oracle程式設計學習儲存過程 函式 游標

oracle程式設計不同於sqlserver,日期函式和sqlserver不同,資料型別轉換和sqlserver不同,為了將oracle學習簡單化,重點指出幾個常見並且用得比較多的 函式日期函式 months between sysdate,指定時間 算出日期時間差 add months sysda...