我有一个pl/sql函数,该函数返回具有属性start_date的数据类型:
create or replace FUNCTION RETURN_OBJ
RETURN my_obj
IS
obj my_obj;
BEGIN
obj := my_obj(SYSDATE);
RETURN obj;
END;
create or replace TYPE my_obj
AS OBJECT (
start_date DATE
);
我可以在简单的选择语句中使用属性,例如
select RETURN_OBJ().start_date FROM DUAL
但是,当我尝试使用虚拟表(例如,为了避免多个函数调用)时,我会发现一个错误:
select obj.start_date from (select RETURN_OBJ() AS obj FROM DUAL)
ORA-00904: "OBJ"."START_DATE": invalid identifier
我是在使用错误的语法,还是不可能?(顺便说一下,我正在使用Oracle 11,尽管客户仍在9中)
非常感谢。
括号: - )
select (obj).start_date from (select RETURN_OBJ() AS obj FROM DUAL)
当您喜欢从对象类型访问函数时,必须使用表别名。尝试这个:
SELECT t.obj.start_date
FROM (SELECT RETURN_OBJ() AS obj FROM DUAL) t;