下午好, 在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;
/
运行时编译失败。
请帮助
答案 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行数据。
您还需要声明要选择的变量。