函数使用CASE语句编译错误

时间:2018-05-03 12:00:46

标签: plsql

下午好, 在Oracle顶点我试图创建一个简单的函数,其中包含一个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;
 /

运行时编译失败。

请帮助

2 个答案:

答案 0 :(得分:1)

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;

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

答案 1 :(得分:0)

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

例如:

SELECT 1 
INTO v_dummy
FROM dual;

或:

SELECT 1,2
INTO v_dummy
FROM dual;

如果您希望查询返回多行,则在select into查询中无法实现。使用它时,您应该只期望接收1行数据。

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