【问题标题】:Oracle function Select Into not working correctlyOracle 函数 Select Into 无法正常工作
【发布时间】:2021-12-25 20:56:33
【问题描述】:

大家好,我有以下代码:

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: 精确提取返回的行数多于请求的行数 ORA-06512:在“GET_STATE_USER”,第 8 行

【问题讨论】:

  • 您的选择返回多于一行
  • 不,当我在函数之外运行它时,它只有一行,并且员工的用户列是唯一的人。 @Beso

标签: oracle plsql oracle11g


【解决方案1】:

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

试试这个:

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;

【讨论】:

    【解决方案2】:

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

    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;
    /
    

    【讨论】:

      猜你喜欢
      • 2016-04-18
      • 2013-08-26
      • 1970-01-01
      • 2013-11-08
      • 2013-11-30
      • 1970-01-01
      • 2023-04-10
      • 2017-12-15
      • 2013-03-27
      相关资源
      最近更新 更多