函数与 CASE 语句编译错误



下午好, 在 Oracle apex 中,我正在尝试创建一个简单的函数,其中包含一个 case 语句。

当我尝试创建函数时出现我的问题,我遇到了编译错误,以下是使用的代码:

CREATE OR REPLACE FUNCTION sale( empid NUMBER)
RETURN NUMBER IS
empid NUMBER;
BEGIN
SELECT( CASE
WHEN sales >  0 AND sales <= 700 THEN 'low'
WHEN sales >= 701 AND sales <= 1200 THEN 'med'
WHEN sales > 1201  THEN 'high'
ELSE 'N/A'
END) AS tot_sales
FROM emps
WHERE emps.empid = sale.empid;
RETURN ( 'employee: ' || empid || ' has a ' || tot_sales|| 'rating of total sales');
END;
/

运行时编译不成功。

请帮忙

CREATE OR REPLACE FUNCTION sale( v_empid NUMBER)
RETURN varchar2 IS
v_text varchar2(200);
BEGIN
SELECT CASE
WHEN sales >  0 AND sales <= 700 THEN 'low'
WHEN sales >= 701 AND sales <= 1200 THEN 'med'
WHEN sales > 1201  THEN 'high'
ELSE 'N/A'
END 
into v_text
FROM emps
WHERE emps.empid = v_empid;
RETURN ( 'employee: ' || v_empid || ' has a ' || v_text|| ' rating of total 
sales');
END;

试试这个。 您需要声明字符串变量,并且查询的结果应放入其中。 但也要考虑到您的查询应仅返回一行。否则,您会收到错误。 参数名称也必须与列名称不同。

如果你在 PL/SQL 中使用 SQL SELECT 语句 - 在 BEGIN 和 END 关键字之间 - 你必须选择 INTO 某些东西,以便 PL/SQL 可以利用变量来保存查询的结果。此处请务必注意,如果要选择多个列,则必须指定多个变量或记录以将查询结果插入其中。

例如:

SELECT 1 
INTO v_dummy
FROM dual;

或:

SELECT 1,2
INTO v_dummy
FROM dual;

如果希望查询返回多行,则在选择查询中将无法执行此操作。使用此功能时,您应该只会收到 1 行数据。

您还需要声明要选择的变量。

最新更新