Oracle儲存過程以及呼叫

2021-08-24 18:02:36 字數 2018 閱讀 5452

剛開始學習儲存過程,寫下自己的一點總結,參考了這位大神的部落格

首先建乙個表,名為t_2018jjr

表結構:

一、無引數的

create or replace procedure firstpro

as countpro number(3);

begin

select count(*) into countpro from t_2018jjr;

dbms_output.put_line('總天數'||countpro);

end firstpro;

執行:call firstpro();或者begin firstpro(); end ; 或者找到這個儲存過程 右鍵 test

執行結果顯示在output視窗

二 有輸入輸出引數(輸入用in 輸出用out,只能實現輸出為1條資料的查詢)

--帶輸入輸出引數的

create or replace procedure senpro(tname in varchar2,tdate out varchar2)

as begin

select count(t_date) into tdate from t_2018jjr where t_name=tname;

dbms_output.put_line('日期'||tdate);

end senpro;

--呼叫

declare

cname varchar(10);

cdate varchar(10);

begin

cname:='春節';

cdate:='';

senpro(cname,cdate);

end;

也可以找到該儲存過程 右鍵 test 進行測試

結果:

三 有輸入輸出引數 輸出引數為游標(這樣能實現輸出n條資料的情況)

create or replace  procedure testpro(tname in varchar2,classt_2018jjr out sys_refcursor)

as type ref_cursor_type is ref cursor;--定義乙個動態游標

t_2018jjrs ref_cursor_type;--定義節假日集合為乙個游標型別

t_2018jjr_row t_2018jjr%rowtype;--定義節假日型別,型別為t_2018jjr錶行型別

begin

open t_2018jjrs for select * from t_2018jjr where t_name=tname;--開啟游標

classt_2018jjr :=t_2018jjrs;----把查詢結果賦值給輸出變數

loop

fetch classt_2018jjr into t_2018jjr_row;

exit when classt_2018jjr%notfound; --迴圈到空跳出迴圈

dbms_output.put_line('日期'||t_2018jjr_row.t_date);

end loop;

end testpro;

--呼叫

declare

cname varchar(10);

ct_2018jjr sys_refcursor;

begin

cname:='春節';

testpro(cname,ct_2018jjr);

end;

結果:

暫時學習到這兒。。。

關於oracle的儲存過程以及呼叫。

這篇是我真正意義上的第一篇部落格,之前一直在oracle中的procedure中建立儲存過程,不過一直有錯,所以上網查了一下,發現儲存過程可以直接在comment windows中直接編寫就行了。首先看看下面這個例子 create or replace procedure test is 這裡是要定...

Oracle分頁儲存過程以及C 呼叫

1 分頁儲存過程 首先需要新建乙個包,至於為什麼要這麼做,我沒有深究,如有童鞋知道的話,只會一聲哈 建立包 create or replace package pck system is type t cursor is ref cursor end pck system 建立儲存過程 create...

Oracle儲存過程呼叫儲存過程

oracle儲存過程呼叫有返回結果集的儲存過程一般用光標的方式,宣告乙個游標,把結果集放到游標裡面,然後迴圈游標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...