當前位置:首頁 » 存儲配置 » oracle存儲過程游標參數

oracle存儲過程游標參數

發布時間: 2023-01-01 15:54:13

A. oracle存儲過程的參數游標應該怎樣來賦值

oracle存儲過程的參數游標應該怎樣來賦值
可以使用動態游標。
REF CURSOR 存儲過程中使用 open cursor xxx for select xxx ;

B. ORACLE存儲過程里游標的結果集怎麼帶參數

SELECT T.APPLY_USER FROM APPLYINFO T WHERE T.APPLY_ID = APPLY_ID;
這個語句已經寫對了,還有什麼問題?

C. oracle 存儲過程 游標

你游標木有定義把,一般都是這樣寫的.還有你的列名是a1,前面加了個限定t是把?如果加限定的話,那在from後面的數據來源表,就需要標明那個表是t.
vstr1 varchar2(100)
vstr2 varchar2(100)
declare r_cur cursor for select t.a1,t.a2 from abc t
open r_cur
fetch from r_cur into vstr1,vstr2
後面就是
while @@FETCH_STATUS = 0 .....等等不寫了。
反正游標頭我都是那麼寫,沒有問題。

D. Oracle存儲過程游標for循環怎麼寫

  • 首先編寫存儲過程的整體結構,如下:

    create or replace procere test_proc is

    v_date date; --變數定義

    begin

    select sysdate into v_date from al;

    end test_proc;

E. ORACLE存儲過程中游標作為輸出參數調用時怎麼報錯

你的意思是不是要獲取到「當前用戶:user_id」這個的內容,如果是,兩個方式可以解決:
1.通過存儲過程的出參,將「當前用戶:user_id」連接串返回;
比如:
假設你的過程叫,prc_test,在參數列表中增加出參。
create or replace procere prc_test(入參 in 類型, 出參 out 類型) is
begin
-- 邏輯實現
end;
出參就是你要把內容放進去,用來傳值的變數。
2.在過程中保存一張臨時表,然後在java中查出這個臨時表中保存的數據。
定義臨時表table_temp
在過程中
insert into table_temp(msg) values ('當前用戶:' || user_id);

F. oracle存儲過程中使用游標作為out類型參數,求救!

1、你定義的【RET_CURSOR_VALUE】是一個游標變數,當他作為參數傳入過程【GET_EMPINFOBYDEPNO】時候已經被打開(就是open...for),在主程序中再度打開是沒有必要的也是錯誤的(且游標變數只能用【open...for】的形式打開)。
2、所以把【OPEN
RET_CURSOR_VALUE】這句話刪掉,就沒有問題了。
*******************************
口說無憑,oracle實施log請參照:
說明:我把empno改成20了(因為表裡面沒有1的數據),還有把open語句注掉了。
*******************************
[SCOTT@ORA1]
SQL>DECLARE
2
RET_CURSOR_VALUE
PKG_CONST.REF_CURSOR;
3
RET_EMPNO
EMP.EMPNO%TYPE;
4
RET_ENAME
EMP.ENAME%TYPE;
5
BEGIN
6
GET_EMPINFOBYDEPNO(20,
RET_CURSOR_VALUE);
7
--OPEN
RET_CURSOR_VALUE
;--報游標類型有誤,未解決!!!
8
LOOP
9
FETCH
RET_CURSOR_VALUE
10
INTO
RET_EMPNO,
RET_ENAME;
11
EXIT
WHEN
RET_CURSOR_VALUE%NOTFOUND;
12
DBMS_OUTPUT.PUT_LINE('empNo
is:'
||
RET_EMPNO
||
',empName
is'
||
13
RET_ENAME);
14
END
LOOP;
15
CLOSE
RET_CURSOR_VALUE;
16
END;
17
/
empNo
is:7369,empName
isSMITH
empNo
is:7566,empName
isJONES
empNo
is:7902,empName
isFORD
---
以上,希望對你有所幫助。

G. oracle存儲過程中定義游標,請問游標定義語句中能使用變數么

不是這樣的,存儲過程中不是非要用游標啊,他有輸入和輸出參數,只要在過程中做相應的處理就會返回輸出參數。游標的作用主要是為了循環提取數據,游標分隱性游標和顯性游標。
舉個例子(顯性游標):
cursor
游標名
is
select
語句;
.....
while
游標名%
found
loop
.....
end
loop;
其中的select
語句提取的是一列值,然後每次取一個進行下面的循環。
(隱性游標):
for
游標名
in
(select
語句)loop
.....
.....
end
loop;
其中的select
語句提取的也是一列值,然後每次取一個進行下面的循環。

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

您好,要自己定義一個type [cur_name] is ref cursor游標,返回的時候就直接 procere AAA(變數名 out [cur_name])如此申明OUT變數
存儲過程 用系統默認的 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;
procere getMyCursor(val out my_ref_cursor);
end my_pack;

create or replace package body my_pack as
procere 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;
procere getMyCursor(val out my_ref_cursor);
end my_pack;

create or replace package body my_pack as
procere 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 procere 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 procere 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 procere 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;

I. Oracle資料庫存儲過程中輸出參數為自定義游標類型時,使用call或者exec調用時,用什麼來給游標賦值

直接寫select語句就好了

熱點內容
在linuxpython 發布:2024-04-27 22:38:57 瀏覽:315
機頂盒密碼是在哪裡 發布:2024-04-27 22:32:47 瀏覽:157
名圖買哪個配置值得買 發布:2024-04-27 22:32:36 瀏覽:877
比亞迪秦pro選哪個配置好 發布:2024-04-27 22:32:34 瀏覽:533
logn演算法 發布:2024-04-27 21:58:36 瀏覽:596
11選五的簡單演算法 發布:2024-04-27 21:46:14 瀏覽:71
ebay圖片上傳 發布:2024-04-27 21:31:50 瀏覽:587
微信電腦登錄顯示伺服器錯誤 發布:2024-04-27 20:58:08 瀏覽:135
壓縮彈簧安裝 發布:2024-04-27 20:35:43 瀏覽:371
淘寶視頻無法上傳視頻 發布:2024-04-27 20:31:27 瀏覽:643