Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
如何在Oracle存储过程中返回xmltypes的结果_Xml_Oracle_Plsql_Oracle11g - Fatal编程技术网

如何在Oracle存储过程中返回xmltypes的结果

如何在Oracle存储过程中返回xmltypes的结果,xml,oracle,plsql,oracle11g,Xml,Oracle,Plsql,Oracle11g,我有一个存储过程: CREATE OR REPLACE udp_get_employeeaddress ( result_set out sys_refcursor ) AS BEGIN open result_set for select xmlcolumn from employees where rownum < 3; END udp_get_employees; 我希望我的存储过程返回与独立查询相同的结果集 这是我第一次尝试Oracle/xml数据库,因为我主要是S

我有一个存储过程:

CREATE OR REPLACE udp_get_employeeaddress ( result_set out sys_refcursor )
AS
BEGIN
   open result_set for
   select xmlcolumn from employees where rownum < 3;

END udp_get_employees;
我希望我的存储过程返回与独立查询相同的结果集

这是我第一次尝试Oracle/xml数据库,因为我主要是SQL Server db开发人员。非常感谢您的帮助

谢谢


更新了:表定义/查询结果

这不是您的过程中的问题,但SQL Developer如何处理输出变量似乎有点奇怪-我看不到在该选项卡中显示该变量的实际内容的方法

或者,通过从SQL工作表(作为脚本(F5)运行)调用该过程,可以看到该过程正在工作:


这不是您的过程的问题,但SQL Developer如何处理输出变量似乎有点奇怪-我看不到在该选项卡中显示该变量的实际内容的方法

或者,通过从SQL工作表(作为脚本(F5)运行)调用该过程,可以看到该过程正在工作:


“结果不一样”是什么意思?如果您只是返回了不同的行,那可能是因为这两条语句都没有order by子句?我们无法查看您的数据-请编辑您的帖子并提供其他信息。您好@AlexPoole这只是一个示例,但为什么这里需要“订购人”?实际上,当您只执行SELECT语句时,它将返回xml,当执行sp时,它将返回SQL Dev中的jdbc.type in Output Variables选项卡。我已经添加了一个关于SQL Developer正在做什么的答案,但这只是一个附带问题;如果您的
employees
表有两行以上,则
rownum<3
子句意味着它将随机选择其中两行。Oracle返回中的行的顺序上的
rownum
过滤器。如果运行
select
并将过程紧密地放在一起,您可能会得到相同的两个结果,并且它通常会执行您期望的操作,但是没有任何保证,并且它有一天会中断。您必须指定一个
order by
子句,以确保获得预期的行和一致的结果。另一方面,不建议使用混合大小写名称创建对象,如
“EMPLOYEE”
,这可能会在某个时候给您带来麻烦。你必须引用双引号中的对象,并且每个地方都有完全相同的大小写;然而,如果你只称它为
EMPLOYEES
,它不区分大小写,不需要引号。你说的“结果不一样”是什么意思?如果您只是返回了不同的行,那可能是因为这两条语句都没有order by子句?我们无法查看您的数据-请编辑您的帖子并提供其他信息。您好@AlexPoole这只是一个示例,但为什么这里需要“订购人”?实际上,当您只执行SELECT语句时,它将返回xml,当执行sp时,它将返回SQL Dev中的jdbc.type in Output Variables选项卡。我已经添加了一个关于SQL Developer正在做什么的答案,但这只是一个附带问题;如果您的
employees
表有两行以上,则
rownum<3
子句意味着它将随机选择其中两行。Oracle返回中的行的顺序上的
rownum
过滤器。如果运行
select
并将过程紧密地放在一起,您可能会得到相同的两个结果,并且它通常会执行您期望的操作,但是没有任何保证,并且它有一天会中断。您必须指定一个
order by
子句,以确保获得预期的行和一致的结果。另一方面,不建议使用混合大小写名称创建对象,如
“EMPLOYEE”
,这可能会在某个时候给您带来麻烦。你必须引用双引号中的对象,并且每个地方都有完全相同的大小写;然而,如果你只是叫它
EMPLOYEES
,它不区分大小写,不需要引号。很好,谢谢@Alex。。。我猜这种困惑是因为我习惯于SQL Management Studio在一个地方(单向)获得结果,很好,谢谢@Alex。。。我想这种混乱是因为我习惯于在一个地方(单向)获得结果的SQL Management Studio
select xmlcolumn from employees where rownum < 3;
CREATE TABLE "EMP"."Employees"
  (
    "ID"              NUMBER,
    "XML_COLUMN" "XMLTYPE"
  )
  xmltype column "XML_COLUMN" STORE AS BINARY XML
  xmlschema "http://www.web.com/emp.xsd"
  element "root"  
var rc refcursor;
exec udp_get_employeeaddress(:rc);
print :rc;