日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle存储过程 --1

發布時間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle存储过程 --1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?一,oracle存儲過程語法
?
?
?
1.oracle存儲過程結構
?
CREATE OR REPLACE PROCEDURE oracle存儲過程名字
?
(
?
??? 參數1 IN NUMBER,
?
??? 參數2 IN NUMBER
?
) IS
?
變量1 INTEGER :=0;
?
變量2 DATE;
?
BEGIN
?
END oracle存儲過程名字
?
?
?
2.無返回值的oracle存儲過程
?
create or replace procedure xs_proc_no is
?
begin
?
? insert into xuesheng values (3, 'wangwu', 90, 90);
?
? commit;
?
end xs_proc_no;
?
?
?
3.有單個數據值返回的oracle存儲過程
?
create or replace procedure xs_proc(temp_name in varchar2,
?
??????????????????????????????????? temp_num? out number) is
?
? num_1 number;
?
? num_2 number;
?
begin
?
? select yu_wen, shu_xue
?
??? into num_1, num_2
?
??? from xuesheng
?
?? where xing_ming = temp_name;
?
? --dbms_output.put_line(num_1 + num_2);
?
? temp_num := num_1 + num_2;
?
end;
?
其中,以上兩種與sql server基本類似,而對于返回數據集時,上述方法則不能滿足我們的要求。在Oracle中,一般使用ref cursor來返回數據集。示例代碼如下:
?
?
?
4.有返回值的oracle存儲過程(列表返回)
?
首先,建立我們自己的包。并定義包中的一個自定義ref cursor
?
create or replace package mypackage as
?
? type my_cursor is ref cursor;
?
end mypackage;
?
在定義了ref cursor后,可以書寫我們的程序代碼
?
create or replace procedure xs_proc_list(shuxue?? in number,
?
???????????????????????????????????????? p_cursor out mypackage.my_cursor) is
?
begin
?
? open p_cursor for
?
??? select * from xuesheng where shu_xue > shuxue;
?
end xs_proc_list;
?
?
?
5.SELECT INTO STATEMENT
?
? 將select查詢的結果存入到變量中,可以同時將多個列存儲多個變量中,必須有一條
?
? 記錄,否則拋出異常(若沒有記錄則拋出NO_DATA_FOUND)
?
? 例子:
?
? BEGIN
?
? SELECT name,age into 變量1,變量2 FROM user where xxx;
?
? EXCEPTION
?
? WHEN NO_DATA_FOUND THEN
?
????? xxxx;
?
? END;
?
? ...
?
?
?
6.IF 判斷
?
? IF V_TEST=1 THEN
?
??? BEGIN
?
?????? do something
?
??? END;
?
? END IF;
?
?
?
7.WHILE 循環
?
? WHILE V_TEST=1 LOOP
?
? BEGIN
?
?XXXX
?
? END;
?
? END LOOP;
?
?
?
8.變量賦值
?
? V_TEST := 123;
?
?
?
9.用FOR IN 使用cursor
?
? ...
?
? IS
?
? CURSOR cur IS SELECT * FROM xxx;
?
? BEGIN
?
?FOR cur_result in cur LOOP
?
? BEGIN
?
?? V_SUM :=cur_result.列名1+cur_result.列名2
?
? END;
?
?END LOOP;
?
? END;
?
?
?
10.帶參數的CURSOR
?
? CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
?
? OPEN C_USER(變量值);
?
? LOOP
?
?FETCH C_USER INTO V_NAME;
?
?EXIT FETCH C_USER%NOTFOUND;
?
??? do something
?
? END LOOP;
?
? CLOSE C_USER;
?
?
?
11.用pl/sql developer debug
?
? 連接數據庫后建立一個Test WINDOW
?
? 在窗口輸入調用SP的代碼,F9開始debug,CTRL+N單步調試
?
?
?
二,oracle存儲過程的若干問題備忘
?
?
?
1.在oracle中,表別名不能加as,如:
?
select a.name from user a;-- 正確
?
select a.name from user as a;-- 錯誤

轉載于:https://www.cnblogs.com/mr-hero/p/3489851.html

總結

以上是生活随笔為你收集整理的oracle存储过程 --1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。