存储过程游标参数
A. ORACLE存储过程里游标的结果集怎么带参数
SELECT T.APPLY_USER FROM APPLYINFO T WHERE T.APPLY_ID = APPLY_ID;
这个语句已经写对了,还有什么问题?
B. 存储过程中输出参数为游标的时候怎么处理
你的意思是不是要获取到“当前用户: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);
C. cx_Oracle,怎么调用存储过程,有一个游标的传出参数
给你个誉唤滚示例,庆余望链橡采纳
create or replace FUNCTION contact
(
p_cursor SYS_REFCURSOR,
p_exclude_null VARCHAR2 := 'T',
p_del VARCHAR2 := ','
) RETURN VARCHAR2 IS
l_value VARCHAR2(32767);
l_result VARCHAR2(32767);
BEGIN
LOOP
FETCH p_cursor
INTO l_value;
EXIT WHEN p_cursor%NOTFOUND;
l_result := l_result || p_del || l_value;
END LOOP;
RETURN substr(l_result, 2);
END;
/
DECLARE
l_result VARCHAR2(32767);
BEGIN
SELECT contact(CURSOR (SELECT tname FROM tab WHERE rownum < 10)) INTO l_result FROM al;
dbms_output.put_line(l_result);
END;
D. 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);
E. oracle存储过程的参数游标应该怎样来赋值
oracle存储过程的参数游标应该怎样来赋值
可以使用动态游标。
REF CURSOR 存储过程中使用 open cursor xxx for select xxx ;
F. 存储过程中使用游标带参数的目的是什么,为什么不能将参数直接放在procere里面呢,感觉怪怪的
snowy_howe 回答是正确的.
下面我粘贴一下 使用 使用游标带参数的例子, 与 不使用的例巧梁子, 你可以对照一下.
-- 首先是一个 使用 带参数的游标的例子, 也就是那个 游标(子表).
DECLARE
-- 定义游标(主表).
CURSOR c_test_main IS
SELECT id, value FROM test_main;
-- 保存主表游标数据的变量
v_main_data c_test_main%ROWTYPE;
-- 定义游标(子表).
CURSOR c_test_sub(p_main_id INT) IS
SELECT id, value
FROM test_sub
WHERE main_id = p_main_id;
-- 保存子表游标数据的变量
v_sub_data c_test_sub%ROWTYPE;
BEGIN
-- 打开游标(主表).
OPEN c_test_main;
-- 开始循环处理(主表).
LOOP
-- 填充数据(主表).
FETCH c_test_main INTO v_main_data;
-- 假如没有检索到(主表)数据,结束循环处理
Exit when c_test_main%NOTFOUND;
dbms_output.put_line('Main:'
|| TO_CHAR(v_main_data.id) || '哪神='
|| v_main_data.value );
-- 打开游标(子表).
OPEN c_test_sub(v_main_data.id);
-- 开始循环处理(子表).
LOOP
-- 填充数据(子表).
FETCH c_test_sub INTO v_sub_data;
-- 假如没有检索到(子表)数据,结束循环处理
Exit when c_test_sub%NOTFOUND;
dbms_output.put_line('-->Sub:'
|| TO_CHAR(v_sub_data.id) || '='
|| v_sub_data.value );
END LOOP;
-- 关闭游标(子表).
CLOSE c_test_sub;
END LOOP;
-- 关闭游标(主表).
CLOSE c_test_main;
END;
/
-- 下面是 SQL Server 的, 不支持 带参数的游标 的
子游标的中的 SQL 语句里面,写入子表列名 = @变量的方式。
通过在父游标中更新该变量的方式来实现同样的功能。
DECLARE
@id INT, @value VARCHAR(10),
@subid INT, @subvalue VARCHAR(10);
BEGIN
-- 定义游标(主表).
DECLARE c_test_main CURSORFOR
SELECT id,valueFROM test_main;
-- 注意:假如子表的游标定义在这里,执行的时候,将得不到结果
-- 打开游标(主表).
OPEN c_test_main;
WHILE 1=1
BEGIN
-- 填充数据.
FETCH NEXT FROM c_test_main INTO @id, @value;
-- 假如未检索到(主表)数据,退出循环.
IF@@fetch_status!= 0 BREAK;
PRINT'Main:'+CAST(@id asvarchar)+'='+ @value;
-- 定义游孝缓运标(子表).
DECLARE c_test_sub CURSORFOR
SELECT id,value
FROM test_sub
WHERE main_id = @id;
-- 打开游标(子表).
OPEN c_test_sub;
WHILE 2=2
BEGIN
-- 填充数据.
FETCH NEXT FROM c_test_sub INTO @subid, @subvalue;
-- 假如未检索到(子表)数据,退出循环.
IF@@fetch_status!= 0 BREAK;
PRINT'Sub:'+ @subvalue;
END;
-- 关闭游标(子表)
CLOSE c_test_sub;
-- 释放游标(子表).
DEALLOCATE c_test_sub;
END;
-- 关闭游标(主表)
CLOSE c_test_main;
-- 释放游标(主表).
DEALLOCATE c_test_main;
END;
go
G. 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
---
以上,希望对你有所帮助。
H. java调用的存储过程,能否传入游标参数
java调用的存储过程,不能传入游标参数,但是存储过程调用的内部存储过程,可以存入游标参数。未完待续
I. 存储过程使用游标
ALTER proc [dbo].[存储过程名]
as
begin
declare 游标名字 cursor for select 列名 from 表名 where 条件--先申明游标指向查询出瞎亏州的结果,一列,或者多列都可以,空仔条件自定
declare 变量名 varchar(400)--存储取到的值
open 游标名 --开启游标
while @@FETCH_STATUS=0--取值
begin
fetch next FROM 游标名 into 变量名--这样就将游标指向下一行,得到的第一行值磨蔽就传给变量了
-------------------------------------------
--需要执行的操作,例如修改某表中的字段
update 表名
set 列名=值
where (修改表中的列)=变量名
-------------------------------------------
end
close 游标名--关闭游标
deallocate 游标名--释放游标
end
请采纳。
J. 关于存储过程里使用游标和循环的问题
、带参数游标for循环 一 首先编写存储程整体结构,: create or replace procere test_proc is v_date date; --变量定义 begin select sysdate into v_date from al; end test_proc; 二 定义游标: create or replace procere test_proc is v_date date; --定义变量 cursor cur is select * from ldcode; --定义游标 begin select sysdate into v_date from al; end test_proc; 三 编写for循环: create or replace procere test_proc is v_date date; --定义变量 cursor cur is select * from ldcode where rownum<一0; --定义游标 begin select sysdate into v_date from al; --游标for循环始 for temp in cur loop --temp临变量名,自任意起 Dbms_Output.put_line(temp.Code); --输某字段,使用"变量名.列名"即 end loop; --游标for循环结束 end test_proc; 四 测试运行点击【DBMS Output】标签页查看结图: END 二、带参数游标for循环 一 定义带参数游标: cursor cur(v_codetype ldcode.Codetype%TYPE) is select * from ldcode where codetype = v_codetype; --定义游标 定义游标格式: cursor 游标名称(变量定义) is 查询语句; 注意: where条件变量名v_codetype要与游标定义cur(v_codetype ldcode.Codetype%TYPE)致 二 编写for循环部: --游标for循环始 for temp in cur('llmedfeetype') loop --temp临变量名,自任意起 --cur('llmedfeetype')"游标名称(传入变量)" Dbms_Output.put_line(temp.Code); --输某字段,使用"变量名.列名"即 end loop; --游标for循环结束 三 测试运行点击【DBMS Outpu