Oracle資料庫 十 儲存過程上

2021-08-15 18:09:00 字數 4563 閱讀 7181

儲存過程

建立儲存過程

create procedure test

asbegin

dbms_output.put_line('我的第乙個過程!');

end;

--執行

--serveroutput設定,想讓dbms_output.put_line成功輸出,需要把serveroutput選項設定為on的狀態

show serveroutput

set serveroutput on

begin

test;

end;

檢視儲存過程

select * from user_source where name= 'test' order by line ;

--從檢視user_source中查詢過程或函式時需要把名稱大寫

--檢視儲存過程test_err的錯誤

show errors procedure test_err;

無參儲存過程

無參儲存過程就是建立的儲存過程不帶任何引數,通常這種儲存過程用做資料轉換的機率比較大。

--把錶productinfo中**最低的3件產品的desperation欄位設定為』**商品『

create procedure product_update_prc

asbegin

update productinfo set desperation = '**產品'

where productid in

( select productid from

( select * from productinfo order by productprice asc )

where rownum < 4

);commit;

end;

儲存過程中使用游標

--要求把productinfo表中資料根據不同的產品型別分類把資料輸出到螢幕

create procedure product_cur_prc

ascur_ctgy productinfo.category%type;

cur_ctgyname categroyinfo.categroyname%type;

cur_prtifo productinfo%rowtype;

cursor cur_category

is select category from productinfo group by category;

begin

open cur_category;

loop

fetch cur_category;

exit when cur_category%notfound;

select categoryinfo.categroyname into cur_ctgyname

from categroyinfo

where categroyid = cur_ctgy;

if sql%found then

dbms_output.put_line('---------------');

dbms_output.put_line(cur_ctgyname || ':');

end if;

for my_prdinfo_rec in

(select * from productinfo where category = cur_ctgy

)loop

dbms_output.put_line(

'產品名稱: ' || my_prdinfo_rec.productname|| '產品**: ' || my_prdinfo_rec.productprice|| '產品數量:' || my_prdinfo_rec.quantity

);end loop;

end loop;

close cur_category;

end ;

儲存過程中的ddl語句

有時候我們會在運算元據的時候使用臨時表,而為了讓儲存過程根據有通用性,可以選擇把建立臨時表的步驟一併放到過程裡。這樣的操作會和前面介紹的兩種示例寫法有所不同,它會用到execute immediate語句,儲存過程中會使用它來執行ddl語句和動態sql語句

--要求把各種不同型別的產品中**最低的輸入到臨時表productinfo_tmp(此表需要建立)中,並在其中desperation欄位註明「熱銷商品「,如果記錄中**低於20則表示資料有問題,需要輸出到螢幕

create procedure product_tmep_update_prc

aspc_delestr varchar2(50);

pc_createstr varchar2(500);

pc_insrtstr varchar2(500);

tabext varchar2(10); --判斷臨時表是否存在中間變數

cur_ctgy productinfo.category%type;

cur_prtifo productinfo%rowtype;

cursor cur_category

isselect category from prodictinfo group by category;

cursor cur_proinfo(ctgy varchar)

isselect * from

(select * from productinfo where category = ctgy order by productprice asc)

where rownum < 2;

begin

select count(1)into tabext

from all_tables

where table_name = 'productinfo_tmp'

pc_delestr:= 'delecte from productinfo_tmp'

pc_createstr := 'create global temporary table productinfo_tmp

(productid varchar2(10) not null,

productname varchar2(20),

productprice number(8,2),

quantity number(10),

category varchar2(10),

desperation varchar2(1000),

origin barchar2(10)

)on commit preserve rows';

if tabext=0 then --不存在就建立乙個

execute immediate pc_createrstr;

dbms_output.put_line('建立臨時表成功');

else

execute immediate pc_delestr;

dbms_output.put_line('刪除記錄完成');

end if;

open cur_category;

loop

fetch cur_category into cur_ctgy;

exit when cur_category%notfound;

open cur_proinfo(cur_ctgy);

fetch cur_proinfo into cur_prtifo;

if cur_proinfo%found then

if cur_prtifo.productprice < 20 then --產品**低於20的列印出來

dbms_output.put_line('產品id:'||cur_prtifo.productid||'產品名稱:' ||cur_prtifo.productname||' 產品**:' || cur_prtifo.productprice

);else --非低於20**的產品輸入到臨時表

execute immediate 'insert into productinfo_tmp(productid,productname.productprice,quantity,category,desperation,origin) values (...||cur_prtifo.productid||...,...||cur_prtifo.productname||...,...||cur_prtifo.productpruce||...,...||cur_prtifo.quantity||...,...||cur_prtifo.category||...,...||cur_prtifo.desperation||...,...||cur_prtifo.origin||...)';

end if;

end if;

close cur_proinfo;

end loop;

commit;

close cur_category;

execute immediate 'update productinfo_tmp set desperation = ''熱銷商品''',

end;

Oracle資料庫儲存過程

建立語句 create or replace procedure 儲存過程名 儲存過程名定義 包括儲存過程名和引數列表。引數名和引數型別。引數名不能重複,引數傳遞方式 in,out,in out in 表示輸入引數,按值傳遞方式。out 表示輸出引數,可以理解為按引用傳遞方式。可以作為儲存過程的輸出...

oracle資料庫 儲存過程

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

匯出oracle資料庫儲存過程

專案結束了,想把自己寫的儲存過程匯出儲存乙份就寫了這麼乙個簡單的指令碼,拿出來給大家共享一下。其實很簡單,主要用到user procedures user source兩個檢視,大家一看就知道了。好像網上搜到的一些都不夠全面,而且零零散散,如果覺得好的話就支援一下吧,usr bin ksh prof...