首先見乙個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...