bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

oracle輸出參數怎么定義,oracle參數說明

Oracle中怎么用游標作為輸出參數,寫點代碼舉例吧!

您好,要自己定義一個type [cur_name] is ref cursor游標,返回的時候就直接 procedure AAA(變量名 out [cur_name])如此申明OUT變量

沂南ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創新互聯的ssl證書銷售渠道,可以享受市場價格4-6折優惠!如果有意向歡迎電話聯系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

存儲過程 用系統默認的 sys_refcursor 游標類型 定義變量就OK了

1、Sql代碼

--PL/SQL Code (包中帶過程) 過程帶游標的OUT參數,返回游標(ref cursor)

create or replace package my_pack as

type my_ref_cursor is ref cursor;

procedure getMyCursor(val out my_ref_cursor);

end my_pack;

create or replace package body my_pack as

procedure getMyCursor(val out my_ref_cursor)

is

begin

open val for select * from student;

end;

end my_pack;

--PL/SQL Code (包中帶過程) 過程帶游標的OUT參數,返回游標(ref cursor)

create or replace package my_pack as

type my_ref_cursor is ref cursor;

procedure getMyCursor(val out my_ref_cursor);

end my_pack;

create or replace package body my_pack as

procedure getMyCursor(val out my_ref_cursor)

is

begin

open val for select * from student;

end;

end my_pack;

2、Java代碼

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@XX.XX.XX.XXX:XXXX:oracle9i","XXX_temp","XXX_temp");

DriverManager.registerDriver (new oracle.jdbc.OracleDriver());

CallableStatement cs = conn.prepareCall("{ call my_pack.getMyCursor(?) }");

cs.registerOutParameter(1,OracleTypes.CURSOR);

cs.execute();

ResultSet rs = ((OracleCallableStatement)cs).getCursor(1);

while(rs.next())

{

System.out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3)+" "+ rs.getDate(4)+" "+rs.getString(5));

}

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@XX.XX.XX.XXX:XXXX:oracle9i","XXX_temp","XXX_temp");

DriverManager.registerDriver (new oracle.jdbc.OracleDriver());

CallableStatement cs = conn.prepareCall("{ call my_pack.getMyCursor(?) }");

cs.registerOutParameter(1,OracleTypes.CURSOR);

cs.execute();

ResultSet rs = ((OracleCallableStatement)cs).getCursor(1);

while(rs.next())

{

System.out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3)+" "+ rs.getDate(4)+" "+rs.getString(5));

}

3、Sql代碼

--PL/SQL Code(存儲過程) 帶游標的OUT參數,返回游標(ref cursor)

create or replace procedure retCursor(ret_cursor out sys_refcursor)is

ret_cursor_value sys_refcursor;

begin

open ret_cursor_value for select * from student;

ret_cursor:=ret_cursor_value;

end retCursor;

--PL/SQL Code(存儲過程) 帶游標的OUT參數,返回游標(ref cursor)

create or replace procedure retCursor(ret_cursor out sys_refcursor)is

ret_cursor_value sys_refcursor;

begin

open ret_cursor_value for select * from student;

ret_cursor:=ret_cursor_value;

end retCursor;

4、Java代碼

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection conn = Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@XX.XX.XX.XXX:XXXX:oracle9i","XXX_temp","XXX_temp");

DriverManager.registerDriver (new oracle.jdbc.OracleDriver());

CallableStatement cs = conn.prepareCall("{ call retCursor(?) }");

cs.registerOutParameter(1,OracleTypes.CURSOR);

cs.execute();

ResultSet rs = ((OracleCallableStatement)cs).getCursor(1);

while(rs.next())

{

System.out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3)+" "+ rs.getDate(4)+" "+rs.getString(5));

}

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection conn = Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@XX.XX.XX.XXX:XXXX:oracle9i","XXX_temp","XXX_temp");

DriverManager.registerDriver (new oracle.jdbc.OracleDriver());

CallableStatement cs = conn.prepareCall("{ call retCursor(?) }");

cs.registerOutParameter(1,OracleTypes.CURSOR);

cs.execute();

ResultSet rs = ((OracleCallableStatement)cs).getCursor(1);

while(rs.next())

{

System.out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3)+" "+ rs.getDate(4)+" "+rs.getString(5));

}

5、下面是個每個學生求平均值的存儲過程。遇到的問題是帶參數游標中的變量名字不要和表中的一樣,否則會出問題

Sql代碼

create or replace procedure AAA

as

--查詢學生表的ID

cursor s_sno is select s.sno from student s;

--通過學生ID查詢平均成績

cursor sc_avg(s_no varchar2) is select avg(sc.degree) from score sc where sc.sno=s_no;

s_sno_j student.sno%type; --變量ID

sc_avg_i score.degree%type; --變量平局成績

begin

open s_sno;--打開查詢ID的游標

loop

fetch s_sno into s_sno_j;

exit when s_sno%notfound;

open sc_avg(s_sno_j); --打開查詢平均成績的游標,參數為學生ID

loop

fetch sc_avg into sc_avg_i;

exit when sc_avg%notfound;

dbms_output.put_line(sc_avg_i);

end loop;

close sc_avg;

end loop;

close s_sno;

end AAA;

plsql調用oracle存儲過程有輸入參數和輸出參數 sql語句怎么寫如題 謝謝了

假設第一個參數為in參數,每二個參數為out參數:

variable

x

number;

//定義一個綁定變量

exec

過程(1,:x)

//1為輸入參數,x為輸出參數,過程執行后x就得到輸出值了。

print

x

//看結果

oracle存儲過程基本語法

一:存儲過程

創建存儲過程,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系統權限? ?

刪除存儲過程,是過程的創建者或者擁有DROP ANY PROCEDURE系統權限?

修改存儲過程,則只能是過程的創建者或者擁有ALTER ANY PROCEDURE系統權限的人

執行(或調用)存儲過程,是過程的創建者或是擁有EXECUTE ANY PROCEDURE系統權限的人或是被擁有者授予EXECUTE權限的人

1:語法

1)創建

CREATE[ORREPLACE]PROCEDURE存儲過程名[(參數[IN|OUT|INOUT] 數據類型...)]

{AS|IS}

[說明部分]

BEGIN

可執行部分

[EXCEPTION

錯誤處理部分]

END[過程名];

說明:

OR REPLACE?表示如果存在就覆蓋存儲過程

參數有三種形式:IN、OUT和IN OUT。則默認為IN。

關鍵字AS也可以寫成IS,后跟過程的說明部分,可以在此定義過程的局部變量。

2)刪除存儲過程:

DROP PROCEDURE 存儲過程名;

3)修改存儲過程:

? ALTER PROCEDURE 存儲過程名 COMPILE;?

4)執行存儲過程

??EXECUTE 模式名.存儲過程名[(參數...)];?

?或

? ?BEGIN?

模式名.存儲過程名[(參數...)];

END;

另外:參數可以是變量、常量或表達式

要其它用戶執行存儲過程須要給其它用戶授權

GRANT EXECUTE ON 存儲過程名 TO 用戶名

2:參數說明

IN 定義一個輸入參數變量,用于傳遞參數給存儲過程

OUT 定義一個輸出參數變量,用于從存儲過程獲取數據

IN OUT 定義一個輸入、輸出參數變量,兼有以上兩者的功能

1)參數名 IN 數據類型 DEFAULT 值;

? ? ??定義一個輸入參數變量,用于傳遞參數給存儲過程。

? ? ??可以是常量、有值變量或表達式

? ? ??DEFAULT 關鍵字為可選項,用來設定參數的默認值。如果在調用存儲過程時不指明參數,則參數變量取默認值

? ? ??在存儲過程中,輸入變量接收主程序傳遞的值,但不能對其進行賦值。

2)參數名 OUT 數據類型;

? ? ??定義一個輸出參數變量,用于從存儲過程獲取數據,即變量從存儲過程中返回值給主程序。

? ? ? 在調用存儲過程時,主程序的實際參數只能是一個變量,而不能是常量或表達式。

? ? ??在存儲過程中,參數變量只能被賦值而不能將其用于賦值,而且必須給輸出變量至少賦值一次。

3)參數名 IN OUT 數據類型 DEFAULT 值;?

? ? ??定義一個輸入、輸出參數變量,兼有以上兩者的功能。

? ? ??在調用存儲過程時,主程序的實際參數只能是一個變量,而不能是常量或表達式。

? ? ??DEFAULT 關鍵字為可選項,用來設定參數的默認值。

? ? ??在存儲過程中,變量接收主程序傳遞的值,同時可以參加賦值運算,也可以對其進行賦值。在存儲過程中必須給變量至少賦值一次。

補充:如果省略IN、OUT或IN OUT,則默認模式是IN。?

? ? ? 調用它時參數個數與位置可以不一致,用以下形式調用:

EXECUTE CHANGE_SALARY(P_RAISE=80,P_EMPNO=7788); ?//=運算符左側是參數名,右側是參數表達式

二:函數

創建函數,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系統權限

刪除函數,需要是函數的創建者或者是擁有DROP ANY PROCEDURE系統權限的人

修改函數,需要是函數的創建者或者擁有ALTER ANY PROCEDURE系統權限的人

執行函數,需要是函數的創建者或擁有EXECUTE ANY PROCEDURE系統權限的人

1:語法

1)創建:

CREATE[ORREPLACE]FUNCTION函數名[(參數[IN] 數據類型...)]

RETURN數據類型

{AS|IS}

[說明部分]

BEGIN

可執行部分

RETURN(表達式)

[EXCEPTION

錯誤處理部分]

END[函數名];

說明:

?參數是可選的,但只能是IN類型(IN關鍵字可以省略)。

?在定義部分的RETURN 數據類型,用來表示函數的數據類型,也就是返回值的類型,不可省略。

?在可執行部分的RETURN(表達式),用來生成函數的返回值,其表達式的類型應該和定義部分說明的函數返回值的數據類型一致。在函數的執行部分可以有多個RETURN語句,但只有一個RETURN語句會被執行,一旦執行了RETURN語句,則函數結束并返回調用環境。?

2)刪除

??DROP FUNCTION 函數名;

3)修改

??ALTER PROCEDURE 函數名 COMPILE;

4)執行

??變量名:=函數名(...)?

三:對存儲過程 和 函數的查看(可以通過對數據字典【USER_SOURCE】的訪問來查詢存儲過程或函數的有關信息)

1:查詢某個存儲過程序內容

select TEXT from user_source WHERE NAME='存儲過程名';

2:查看數據字殿

DESCRIBE USER_SOURCE ; //命令行中

3:查看存儲過程的參數

DESCRIBE say_hello; //后面是過程名

4:查看發生編輯錯誤

SHOW ERRORS ;

5:查詢一個存儲過程或函數是否是有效狀態(即編譯成功)

SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='過程名';//注意大小寫

VALID表示該存儲過程有效(即通過編譯),INVALID表示存儲過程無效或需要重新編譯。它的狀態會改變,這與它依賴外部表(表刪除修改等操作)有關系

6:查看存儲過程與表的依賴關系

SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='SAY_HELLO';

說明

NAME為實體名,TYPE為實體類型,REFERENCED_OWNER為涉及到的實體擁有者賬戶,REFERENCED_NAME為涉及到的實體名,REFERENCED_TYPE 為涉及到的實體類型。

問題:

如果一個用戶A被授予執行屬于用戶B的一個存儲過程的權限,在用戶B的存儲過程中,訪問到用戶C的表,用戶B被授予訪問用戶C的表的權限,但用戶A沒有被授予訪問用戶C表的權限,那么用戶A調用用戶B的存儲過程是失敗的還是成功的呢?答案是成功的。

本文名稱:oracle輸出參數怎么定義,oracle參數說明
標題URL:http://vcdvsql.cn/article28/dsiegcp.html

成都網站建設公司_創新互聯,為您提供微信小程序電子商務企業建站移動網站建設ChatGPT外貿網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網頁設計公司