Plsql 具有CASE语句编译错误的函数

Plsql 具有CASE语句编译错误的函数,plsql,Plsql,下午好, 在OracleApex中,我试图创建一个简单的函数,其中包含一个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 >= 7

下午好, 在OracleApex中,我试图创建一个简单的函数,其中包含一个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;
 /
创建或替换功能销售(empid编号)
返回号码是
empid数;
开始
选择(案例)
当销售额>0且销售额=701且销售额为1201时,则为“高”
其他“不适用”
完)总销售额
来自EMP
其中emps.empid=sale.empid;
RETURN('employee:'| | | | | | | empid | |有一个'| | tot | sales | |'总销售额评级');
结束;
/
运行时,编译不成功

请提供帮助

创建或替换功能销售(v_empid编号)
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;
返回varchar2是 v_text varchar2(200); 开始 选择案例 当销售额>0且销售额=701且销售额为1201时,则为“高” 其他“不适用” 结束 变成v_文本 来自EMP 其中emps.empid=v_empid; RETURN('employee:'| v|empid | | |有一个'v|u text | | |'总评分 销售);; 结束;
试试这个。 您需要声明字符串变量,并将查询结果放入其中。 但也要考虑查询只返回一行。否则你会得到错误。
参数名称也必须与列名不同。

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

例如:

SELECT 1 
INTO v_dummy
FROM dual;
或:

如果希望查询返回多行,则在select into查询中不可能这样做。使用此选项时,您应该只收到一行数据


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

无论何时询问错误,发布错误文本都非常有帮助。PLS-00410:记录、表格或参数列表中不允许重复字段。我很笨,我发现错误与我在第1行中的声明有关。我该如何解决这个问题并避免使用empid两次?您共享的函数是有效的,但是在测试函数时;使用从我的emps表中选择的empid,oracle生成:
ORA-06502:PL/SQL:numeric or value error:character to number conversion error
我已更新脚本。若要获取文本,应从函数返回VARCHAR2 type。
SELECT 1,2
INTO v_dummy
FROM dual;