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;
/
大家好,我有以下代码:
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;
/