【问题标题】:Not able to access the object type returned by a plsql function无法访问 plsql 函数返回的对象类型
【发布时间】:2021-09-23 14:54:27
【问题描述】:

我创建了一个对象类型为:

Create or replace type t1 as object
 (
  Account_id varchar2(20),
  Account_date date);

并在包体 p1 中编写了一个返回此对象的函数:

Function account_details(ac_id in account_table.account_id%type)
return t1 is

v_t1 t1;

Begin
 Select t1(account_id,
           Account_date)
        Into v_t1
        From account_table
        Where account_id=ac_id;
Return v_t1;

End account_details;

包编译成功,但是当我尝试执行函数并获取它返回的值时:

Select p1.account_details(1234) from dual;

我得到的输出为:

[P1.t1]

如何获取该对象返回的值。该对象将始终只有从函数返回的一条记录。

我能在这里得到一些帮助吗?

【问题讨论】:

  • 如何从返回的对象中获取单个值?
  • @Neha,我意识到您在提问但不接受任何答案。在 SO 中表示感谢的最佳方式是在显然是正确的答案时接受答案。谢谢
  • @Roberto 很抱歉我错过了回复。谢谢,效果很好!

标签: oracle plsql


【解决方案1】:

您正在取回值,只是 SQL Developer 以这种方式显示对象。您可以像这样获取属性值:

Select account_details(1234).account_id
     , account_details(1234).account_date 
 from dual;

【讨论】:

  • 很抱歉我没有看到回复。非常感谢,效果很好!
【解决方案2】:

不同的工具会有不同的显示复杂类型的方式,例如在 SQL*Plus 中:

SQL> select account_details(1) acc from dual;

ACC(ACCOUNT_ID, ACCOUNT_DATE)
-----------------------------
T1('1', '23-SEP-21')

1 row selected.

为避免依赖默认值,您需要明确指定对象属性。

您可以通过在内联视图中调用每个属性来避免重新执行该函数:

select t.acc.account_id
     , t.acc.account_date
from   ( select account_details(1) acc from dual ) t

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-17
    • 2021-02-05
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    相关资源
    最近更新 更多