oracle函式 儲存過程一些簡單例子

2021-06-26 19:35:13 字數 2335 閱讀 1088

區別:

1. 返回值的區別,函式有1個返回值,而儲存過程是通過引數返回的,可以有多個或者沒有

2.呼叫的區別,函式可以在查詢語句中直接呼叫,而儲存過程必須單獨呼叫.

函式一般情況下是用來計算並返回乙個計算結果而儲存過程一般是用來完成特定的資料操作(比如修改、插入資料庫表或執行某些ddl語句等等)

例子:

--①游標的使用:獲取 sap當天某個零件的收貨資訊說明  引數:零件號,收貨日期 

/*格式: 第一次收貨日期+時間+數量 、第二次收貨日期+時間+數量 、第二n次收貨日期+時間+數量

*/function getshxx( mymnumber varchar2, myday date) return varchar2 is

myresult varchar2(8000);

cursor mycursor is

select  '訂單號('||x.vgbel||')訂單行號('||x.vgpos||')時間('||x.erzet||')到貨'||x.rfmng||'個'  as w

from t2i_sq10  x

where x.matnr=mymnumber 

and to_char(myday,'yyyy-mm-dd')=x.erdat;

myrow mycursor%rowtype;

begin

myresult :=  ' ';

for myrow in mycursor loop

myresult :=myresult ||  myrow.w ||';';

end loop;

return myresult;

end; 

/*②exception的使用:

從sap的sq11介面中得到零件最新的倉庫資訊

*/function getwarhouse(mymnumber varchar2) return varchar2 is

myresult varchar2(8000);

begin

select lgfsb || '' || lgpla

into myresult

from t2i_sq11

where id = (select max(id)

from t2i_sq11 x

where x.matnr = mymnumber

group by matnr);

return myresult;

exception

when no_data_found then

myresult := '';

return myresult;

end;

/*③返回值為結果集的使用:

procedure test(mymnumber varchar2 ,resultdata out mycursortype,flag out varchar2) is

--  type mycursortype is ref cursor /*這句話需要在包的開始裡面定義*/;

begin

open resultdata  for

select lgfsb || '' || lgpla

from t2i_sq11

where id = (select max(id)

from t2i_sq11 x

where x.matnr = mymnumber

group by matnr);

flag :='ok';       

end;

/*④塊的使用,及列印函式dbms_output.put_line(myresult);

見圖4-1,4-2

declare

myresult varchar2(8000);

begin

select lgfsb || '' || lgpla

into myresult

from t2i_sq11

where id = (select max(id)

from t2i_sq11 x

where x.matnr = 'a120032j-d0200'

group by matnr);

dbms_output.put_line(myresult);

exception

when no_data_found then

myresult := '';

dbms_output.put_line(myresult);

end;

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

Oracle儲存過程Procedure簡單介紹

我們都知道sql語言是沒有判斷和過程控制語句的,而pl sql又很好的補充了sql語言這方面的不足。而儲存過程也是一種pl sql塊,但是儲存過程又跟傳統的pl sql塊不一樣,儲存過程是以命名的方式儲存於資料庫中的。它有很多優點,比如 1 儲存過程是以命名的資料庫物件形式儲存於資料庫當中。儲存在資...

一些oracle函式

使用case表示式直接在select語句中執行條件邏輯 select ename,sal,case when sal 2000 then underpaid when sal 4000 then overpaid else ok end as status from emp coalesce函式用實...