[oracle]pl/sql in/out變數的使用和過程中過程的呼叫
阿新 • • 發佈:2019-02-03
--in/out 型別變數的使用 以及過程中呼叫過程,獲取out型別的返回值
--建一張表books --簡單過程一 插入一條記錄- createtable books(bookid number,bookname varchar(50),pubhouse varchar(50));
- --簡單過程一 插入一條記錄
- createorreplaceprocedure sub_pro1
- (bookid in number,bookname in varchar2,pubhouse in varchar2) is
- begin
-
insertinto books values(bookid,bookname,pubhouse);
- end
測試:
- SQL> exec sub_pro1(1,'wudi','安徽文藝出版社');
- PL/SQL procedure successfully completed
--簡單過程二 由id獲取一條記錄的的name
- createorreplaceprocedure sub_pro2
- (bookid in number,bookname out varchar2) is
- begin
- select bookname into bookname from books where bookid=bookid;
- end;
-
--呼叫過程,並打印出結果
- createorreplaceprocedure sub_pro22
- (bookno in number) is
- --接受out變數的內容
- v_bookname varchar(50);
- begin
- --直接呼叫過程
- sub_pro2(bookno,v_bookname);
- --如果成功呼叫,那麼變數應該是有值的
- dbms_output.put_line(bookno||' 的圖書為'||v_bookname);
- end;
測試:
- SQL> exec sub_pro22(1);
- 1 的圖書為wudi
- books表中插入這麼幾條資料
- BOOKID BOOKNAME PUBHOUSE
- ---------- -------------------------------------------------- --------------------------------------------------
- 1 wudi 安徽文藝出版社
- 2 haorn 10
- 3 angle 20
- 4 anglele 10
- --1 建立一個包,定義一個cursor為test_cursor
- createorreplace package testpackage as
- type test_cursor is ref cursor;
- end testpackage;
- --2 建立過程
- createorreplaceprocedure sub_pro3
- (l_pubhouse in varchar2,l_cursor out testpackage.test_cursor) is
- begin
- open l_cursor forselect bookid,bookname from books where pubhouse=l_pubhouse;
- end;
- --3 呼叫過程 列印與遊標
- createorreplaceprocedure sub_pro33(l_pubhouse in varchar2) is
- books_cursor testpackage.test_cursor;
- v_bookid books.bookid%type;
- v_bookname books.bookname%type;
- begin
- sub_pro3(l_pubhouse,books_cursor);
- loop
- fetch books_cursor into v_bookid,v_bookname;
- --not found要連在一起寫
- exit when books_cursor%notfound;
- dbms_output.put_line('圖書ID是:'||v_bookid||' 名稱是:'||v_bookname);
- end loop;
- end;
看起來還能用:
- SQL> exec sub_pro33('10');
- 圖書ID是:2 名稱是:haorn
- 圖書ID是:4 名稱是:anglele
- PL/SQL procedure successfully completed
注意!1 過程中的呼叫只要直接寫過程名就好了,不要什麼呼叫關鍵字。
2 對於out型別的值直接宣告一個相同型別的變數來接收就好了。
3 為了好測試才用另一個過程來顯示結果的,以後會通過jdbc來呼叫過程,獲取函式。