无法访问 plsql 函数返回的对象类型
Posted
技术标签:
【中文标题】无法访问 plsql 函数返回的对象类型【英文标题】:Not able to access the object type returned by a plsql function 【发布时间】: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]
如何获取该对象返回的值。该对象将始终只有从函数返回的一条记录。
我能在这里得到一些帮助吗?
【问题讨论】:
User-defined types documentation 如何从返回的对象中获取单个值? @Neha,我意识到您在提问但不接受任何答案。在 SO 中表示感谢的最佳方式是在显然是正确的答案时接受答案。谢谢 @Roberto 很抱歉我错过了回复。谢谢,效果很好! 【参考方案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
【讨论】:
以上是关于无法访问 plsql 函数返回的对象类型的主要内容,如果未能解决你的问题,请参考以下文章