加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle:从记录数据范例中选择

发布时间:2021-04-01 16:13:58 所属栏目:站长百科 来源:网络整理
导读:我有一个函数返回记录数据范例(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中的错误我指的是.
您可以从PL / 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.

问候,抢.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读