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