【发布时间】:2018-09-21 03:18:24
【问题描述】:
我正在尝试根据用户的输入从函数返回单行用户数据。我无法访问对象列的值。我已经尝试过程序解决方案here 以及几乎复制解决方案here(使用ORACLE 和SQLDeveloper)
CREATE OR REPLACE FUNCTION F_FINDBYSSN (SSN VARCHAR2)
RETURN T_USEROBJECT
AS
THISUSER T_USEROBJECT;
BEGIN
SELECT T_USEROBJECT (A.USER_ID,
A.FIRSTNAME,
A.LASTNAME,
A.SOCIAL,
A.BIRTHDATE,
A.PHONE,
A.USER_ROLE_TYPE_ID,
A.USER_LOGIN_ID,
A.USER_LAST_LOGIN,
B.LOGIN_USERNAME,
B.LOGIN_PASSWORD)
INTO THISUSER
FROM BANK_USERS A
INNER JOIN LOGININFO B
ON A.USER_LOGIN_ID = B.LOGIN_ID
AND A.SOCIAL = SSN;
RETURN THISUSER;
END;
/
对象是用户
CREATE OR REPLACE TYPE T_USEROBJECT IS OBJECT
(
USERID INTEGER,
FNAME VARCHAR2 (50),
LNAME VARCHAR2 (50),
SSN VARCHAR2 (15),
BIRTHDATE DATE,
USERPHONE VARCHAR2 (15),
ROLEID INT,
LOGINID INT,
LASTLOGIN DATE,
UNAME VARCHAR2 (50),
UPASS VARCHAR (50)
);
/
这会输出 [T_USEROBJECT]
SELECT *
FROM ( SELECT F_FINDBYSSN('123-45-6789') AS THISUSER FROM DUAL );
在 select 语句中使用任何列名都会导致“无效标识符”错误
【问题讨论】:
-
@a_horse_with_no_name 实际上给出了相同的 [T_USEROBJECT] 输出
-
这似乎是您的 SQL Developer 版本的缺陷。你的代码是正确的。使用当前版本,我看到:i.imgur.com/vhOCRH1.png
-
如果我双击结果中的对象,我会得到:pastebin.com/sWAiejqm。结果和自己一样。但是当我在选择中指定列名时无法访问它们
-
那么您使用的是哪个版本的 SQL Developer?如果不是最新的,您是否尝试过当前的?
-
18.2,相信是最新的吧?
标签: oracle plsql oracle-sqldeveloper stored-functions