当前位置:首页 » 存储配置 » 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语句就好了

热点内容
md5算法java 发布:2024-05-10 09:24:56 浏览:84
四万的电动车什么配置 发布:2024-05-10 08:43:23 浏览:995
小型车有哪些配置 发布:2024-05-10 08:38:56 浏览:526
安卓畅享8a怎么拿出手机卡 发布:2024-05-10 08:18:25 浏览:186
怎么搭建局域网数据库服务器配置 发布:2024-05-10 08:17:29 浏览:657
安卓系统手机怎么解锁 发布:2024-05-10 08:17:27 浏览:472
php数组循环输出 发布:2024-05-10 08:17:18 浏览:679
安卓手机助手导通讯录哪个好 发布:2024-05-10 08:15:49 浏览:281
安卓微信在哪里设置 发布:2024-05-10 08:14:22 浏览:213
苹果抖音如何找回安卓上传的视频 发布:2024-05-10 08:13:42 浏览:438