【问题标题】:Ref cursor not returning column names from StoredProcedure?引用游标不从 StoredProcedure 返回列名?
【发布时间】:2014-02-25 04:28:38
【问题描述】:

我有一个返回SYS_REFCURSOR 的Oracle 存储过程。我想返回在存储过程中声明的自定义参数。现在,当我在我的应用程序(C#)中调用它时,它不会显示列名,而是给我命名为:B1:B2.. 等。我该如何实现这一点。

甲骨文:

CREATE PROCEDURE usp_MyStoredProcedure
(
    OUTPUT_DATA  OUT SYS_REFCURSOR
)
IS
P_NAME VARCHAR2;
P_AGE  VARCHAR2;
P_DOB  VARCHAR2;
BEGIN
     SELECT NAME INTO P_NAME FROM TABLE1;
     SELECT AGE INTO P_AGE FROM TABLE2;
     SELECT DOB INTO P_DOB FROM TABLE3;
OPEN OUTPUT_DATA FOR
    SELECT P_NAME,P_AGE,P_DOB FROM DUAL;
END;

现在,当我执行上面的代码时,我得到的列名是 :B1,:B2,:B3. 我怎样才能得到列名 P_NAME,P_AGE,P_DOB 或其他一些alias 姓名?有可能吗? (相同的SELECT QUERY 如果您在MSSQL 中创建,您将获得参数名称作为列名称)


我已经试过了

SELECT P_NAME as Name,P_AGE as Age,P_DOB as DOB FROM DUAL;

但是我也得到了同样的结果


我尝试时未保存带有别名的查询。

【问题讨论】:

  • 你能把你的c#代码放上来吗?
  • 当我在我的 SqlNavigator 中运行它时,Oracle 本身给我的列名是 :B1,:B2 等
  • 这可能是工具中引用的默认行为。你可以试试sqlplus

标签: c# sql oracle stored-procedures


【解决方案1】:
OPEN OUTPUT_DATA FOR
    SELECT P_NAME as name ,P_AGE as age,P_DOB as dob FROM DUAL;

你可以像这样通过sqlplus进行测试。

VARIABLE MYCUR refcursor;
EXEC URPROC (:MYCUR);

print MYCUR;

如果您在查询中选择值而不是列名,则会错过别名。

【讨论】:

  • 我输入别名后没有保存它。可能是因为它没有出现列名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
相关资源
最近更新 更多