如何在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;