Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql REF CURSOR从过程中获取列_Sql_Oracle_Stored Procedures_Oracle10g - Fatal编程技术网

Sql REF CURSOR从过程中获取列

Sql REF CURSOR从过程中获取列,sql,oracle,stored-procedures,oracle10g,Sql,Oracle,Stored Procedures,Oracle10g,我有一个从SQLDeveloper运行的过程。它泵出大约50根柱子。目前我正在处理一个bug,它正在更新其中一个列。是否可以只显示结果中的X列 我正在以同样的方式运行它 VARIABLE cursorout REFCURSOR; EXEC MY_PROC('-1', '-1', '-1', 225835, :cursorout); PRINT cursorout; 理想情况下,我想打印出第20列,所以我想 PRINT cursorout[20]; 在我看来,您可以在过程my_PROC

我有一个从SQLDeveloper运行的过程。它泵出大约50根柱子。目前我正在处理一个bug,它正在更新其中一个列。是否可以只显示结果中的X列

我正在以同样的方式运行它

 VARIABLE cursorout REFCURSOR;
 EXEC MY_PROC('-1', '-1', '-1', 225835, :cursorout);
 PRINT cursorout;
理想情况下,我想打印出第20列,所以我想

 PRINT cursorout[20];

在我看来,您可以在过程my_PROC中定义一个游标,并将更新的列(例如20)放入游标中,然后返回游标。或者您只需创建一个表来记录过程的每个执行结果

是否可以只显示结果中的X列

没有额外的编码就不行

正如@OldProgrammer在对您的问题的评论中所说的,您可以使用
dbms\u sql
包来描述列并选择一个您喜欢的列

但是,如您所说,如果您知道列名,那么显示该列内容的最简单方法可能是使用XML函数,尤其是
xmlsequence()
extract()

不幸的是,我们不能将SQL*Plus变量作为一个参数传递给 XMLSECONSENCE()/Clult>函数,因此您可以考虑在函数中包装您的过程,该函数返回ReFCurs:< /P>

create or replace function p1_wrapper
return sys_refcursor is
  l_res sys_refcursor;
begin
  p1(l_res);
  return l_res;
end;
/
Function created
测试表:

create table t1(col, col2) as
  select level
       , level
    from dual
   connect by level <= 5;

SQL> select * from t1;

       COL       COL2
---------- ----------
         1          1
         2          2
         3          3
         4          4
         5          5
下面是
p1
过程的函数包装器,它只执行该过程并返回refcursor:

create or replace function p1_wrapper
return sys_refcursor is
  l_res sys_refcursor;
begin
  p1(l_res);
  return l_res;
end;
/
Function created
查询。提取路径是
ROW/COL2/text()
,其中
COL2
是我们要打印的列的名称

结果:

RES                                                                             
--------
1                                                                               
2                                                                               
3                                                                               
4                                                                               
5                                                                               

5 rows selected.

看看DBMS_SQL包。您可以获取光标并获取其元数据(#列等),然后通过索引提取特定的列值。您可能需要将其放入某种函数中,以便sqlplus调用。除此之外,我不知道如何让PRINT命令只打印refcursor中的特定列,我知道列名和答案的索引
RES                                                                             
--------
1                                                                               
2                                                                               
3                                                                               
4                                                                               
5                                                                               

5 rows selected.