Oracle 函数 Select Into 无法正常工作

Oracle function Select Into not working correctly

大家好,我有以下代码:

CREATE OR REPLACE FUNCTION GET_STATE_USER (user_id IN NUMBER)
   RETURN VARCHAR2
AS
   staffName      VARCHAR2 (50);
BEGIN
DBMS_OUTPUT.put_line(user_id);
   SELECT bs.FIRST_NAME || ' ' || bs.LAST_NAME
     INTO staffName
     FROM EMPLOYEE e
    WHERE bs.USER_ID = user_id;

   RETURN (CASE
              WHEN staffName IS NOT NULL THEN staffName
              ELSE 'Invalid'
           END);
END;
/

我收到以下错误: ORA-01422: 精确提取 returns 多于请求的行数 ORA-06512: 在“GET_STATE_USER”,第 8 行

您必须更改输入变量的名称。变量名称不能与 table 列名称相同。

试试这个:

CREATE OR REPLACE NONEDITIONABLE FUNCTION GET_STATE_USER (user__id IN NUMBER)
   RETURN VARCHAR2
AS
   staffName VARCHAR2 (50);
BEGIN
DBMS_OUTPUT.put_line(user__id);
   SELECT bs.FIRST_NAME || ' ' || bs.LAST_NAME
     INTO staffName
     FROM EMPLOYEE bs
    WHERE bs.USER_ID = user__id;

   RETURN (CASE
              WHEN staffName IS NOT NULL THEN staffName
              ELSE 'Invalid'
           END);
END;

实际上我想检查两个表是否存在记录,最后下面的代码成功了:

CREATE OR REPLACE FUNCTION GET_STATE_USER (userId IN NUMBER)
   RETURN VARCHAR2
AS
   r_count     NUMBER;
   userTitle   VARCHAR2 (100);
BEGIN
   SELECT COUNT (1)
     INTO r_count
     FROM EMPLOYEE bs
    WHERE bs.USER_ID = userId;

   IF r_count > 0
   THEN
      SELECT bs.FIRST_NAME || ' ' || bs.LAST_NAME
        INTO userTitle
        FROM EMPLOYEE bs
       WHERE bs.USER_ID = userId;
   ELSE
      SELECT ac.name
        INTO userTitle
        FROM allcustomer ac
       WHERE ac.CUSTOMER_USER_ID = userId;
   END IF;

   RETURN (CASE
              WHEN userTitle IS NOT NULL THEN userTitle
              ELSE 'inavlid'
           END);
END;
/