下午好, 在 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 行数据。
您还需要声明要选择的变量。