Plsql 无法使用returning into子句获取记录类型游标的结果
我有一个程序,应该返回3个部门名称,并更新这三个部门名称的开始时间。此脚本将由并行线程运行。 我尝试使用游标实现它,但没有返回结果 带插入的表格:Plsql 无法使用returning into子句获取记录类型游标的结果,plsql,oracle11g,cursor,Plsql,Oracle11g,Cursor,我有一个程序,应该返回3个部门名称,并更新这三个部门名称的开始时间。此脚本将由并行线程运行。 我尝试使用游标实现它,但没有返回结果 带插入的表格: create table dept (sno number(4), deptname varchar2(40), start_time date) insert into dept values(1,'DEPT1',NULL); insert into dept values(1,'DEPT2',NULL); insert into dept va
create table dept (sno number(4), deptname varchar2(40), start_time date)
insert into dept values(1,'DEPT1',NULL);
insert into dept values(1,'DEPT2',NULL);
insert into dept values(1,'DEPT3',NULL);
insert into dept values(2,'DEPT4',NULL);
insert into dept values(2,'DEPT5',NULL);
insert into dept values(2,'DEPT6',NULL);
方法1:
通过这种方法,我可以用日期更新表,但在游标中无法检索部门名称。以下是我对这个问题的理解 附表内容:
SQL> select * from tdept;
SNO DEPTNAME START_TIME
---------- ---------------------------------------- ----------
1 DEPT1
1 DEPT2
1 DEPT3
2 DEPT4
2 DEPT5
2 DEPT6
6 rows selected.
该程序
- 更新表
- 返回refcursor
执行&结果:
SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';
Session altered.
SQL> var lout refcursor
SQL>
SQL> exec get_deptname(2, :lout);
PL/SQL procedure successfully completed.
SQL> select * from tdept;
SNO DEPTNAME START_TIME
---------- ---------------------------------------- -------------------
1 DEPT1
1 DEPT2
1 DEPT3
2 DEPT4 10.04.2018 20:32:23
2 DEPT5 10.04.2018 20:32:23
2 DEPT6 10.04.2018 20:32:23
6 rows selected.
SQL> print lout
DEPTNAME
----------------------------------------
DEPT4
DEPT5
DEPT6
SQL>
欢迎来到堆栈溢出!请在发布前在预览部分查看您的帖子,并检查是否一切正常。如果没有,那就继续写下去,直到你觉得它很容易阅读和理解为止。这将大大增加有人回答你问题的机会
op_cursor
是一个ref cursor,但是将批量收集返回到
是用于填充收集。是否有其他替代方法来实现此目的?我也尝试返回到,但即使这样,当我尝试从应用程序返回deptname时,也没有返回任何值。声明本人的姓名;c_光标_部门名称;开始获取deptname(2,c_游标);将c_游标循环到i中;DBMS_OUTPUT.PUT_LINE('name:'| | i.op_deptname);未找到c_光标%n时退出;端环;结束;请编辑您的初始消息,删除所有未使用的内容,并仅发布当前正在使用的代码。在没有看到你的情况下,很难猜出什么是错的。
SQL> select * from tdept;
SNO DEPTNAME START_TIME
---------- ---------------------------------------- ----------
1 DEPT1
1 DEPT2
1 DEPT3
2 DEPT4
2 DEPT5
2 DEPT6
6 rows selected.
SQL> create or replace procedure get_deptname
2 (ip_sno in tdept.sno%type,
3 op_cursor out sys_refcursor
4 )
5 is
6 begin
7 update tdept t set
8 t.start_time = sysdate
9 where t.sno = ip_sno;
10
11 open op_cursor for
12 select deptname
13 from tdept
14 where sno = ip_sno;
15 end;
16 /
Procedure created.
SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';
Session altered.
SQL> var lout refcursor
SQL>
SQL> exec get_deptname(2, :lout);
PL/SQL procedure successfully completed.
SQL> select * from tdept;
SNO DEPTNAME START_TIME
---------- ---------------------------------------- -------------------
1 DEPT1
1 DEPT2
1 DEPT3
2 DEPT4 10.04.2018 20:32:23
2 DEPT5 10.04.2018 20:32:23
2 DEPT6 10.04.2018 20:32:23
6 rows selected.
SQL> print lout
DEPTNAME
----------------------------------------
DEPT4
DEPT5
DEPT6
SQL>