Oracle:从记录数据类型中选择
发布时间:2021-03-31 21:01:29 所属栏目:站长百科 来源:网络整理
导读:我有一个函数返回记录数据类型(2个字段:ID和名称).如何从select语句中获取数据? 具体来说,我正在尝试使用OracleCommand对象尝试将对象转换为我的C#代码.我最初尝试过…… CALL FUNCTION_NAME() INTO :loRetVal …但是对于我使用的任何类型,我都会收到数据
我有一个函数返回记录数据类型(2个字段:ID和名称).如何从select语句中获取数据? 具体来说,我正在尝试使用OracleCommand对象尝试将对象转换为我的C#代码.我最初尝试过…… CALL FUNCTION_NAME() INTO :loRetVal …但是对于我使用的任何类型,我都会收到数据类型错误.我也试过…… SELECT * FROM FUNCTION_NAME() ……而且…… SELECT * FROM TABLE ( FUNCTION_NAME() ) ……无济于事我想我在寻找…… SELECT * FROM RECORD ( FUNCTION_NAME() ) ……当然,这不存在. 我能够想出的唯一解决方案是在另一个函数调用中包装此函数调用,其中外部函数返回包含此唯一记录的记录表.然而,这似乎很麻烦,我正在寻找一种更简单的方法.任何帮助,将不胜感激. 编辑:对不起,我也试过SELECT FUNCTION_NAME()FROM DUAL. 解决方法记录数据类型是PL / SQL数据类型. SQL不知道它.这可能是你收到错误的原因.看这个例子:SQL> create package mypkg 2 as 3 type myrec is record 4 ( id int 5,name varchar2(10) 6 ); 7 function f return myrec; 8 end mypkg; 9 / Package created. SQL> create package body mypkg 2 as 3 function f return myrec 4 is 5 r myrec; 6 begin 7 r.id := 1; 8 r.name := 'test'; 9 return r; 10 end f; 11 end mypkg; 12 / Package body created. SQL> desc mypkg FUNCTION F RETURNS RECORD ID NUMBER(38) OUT NAME VARCHAR2(10) OUT SQL> select mypkg.f from dual 2 / select mypkg.f from dual * ERROR at line 1: ORA-00902: invalid datatype SQL中的错误我指的是. SQL> declare 2 r mypkg.myrec; 3 begin 4 r := mypkg.f; 5 dbms_output.put_line(r.id); 6 dbms_output.put_line(r.name); 7 end; 8 / 1 test PL/SQL procedure successfully completed. 如果要在SQL中使用该函数,则可以创建SQL对象类型.请注意,直接从C#调用函数看起来比坚持使用SQL执行此操作更为可取.但只是为了记录: SQL> drop package mypkg 2 / Package dropped. SQL> create type myobj is object 2 ( id int 3,name varchar2(10) 4 ); 5 / Type created. SQL> create package mypkg 2 as 3 function f return myobj; 4 end mypkg; 5 / Package created. SQL> create package body mypkg 2 as 3 function f return myobj 4 is 5 begin 6 return myobj(1,'test'); 7 end f; 8 end mypkg; 9 / Package body created. SQL> select mypkg.f from dual 2 / F(ID,NAME) -------------------------------------------------------------- MYOBJ(1,'test') 1 row selected. 问候,抢. (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |