ORACLE- CASE requires an INTO?
You have wrapped your SQL in a begin/end block, which makes it a PL-SQL statement. In PL-SQL, Oracle is expecting a place to put the result set from the SQL. That's the source of your ORA-06550 error. You'll want a PL-SQL variable declared to hold the result of the query via the INTO.
But the SELECT statement is still a little weird. The way you have it, there's no point in having a real table "tableOfBeans" in the FROM clause.
Did you want something like this?
declare var_type VARCHAR2(10);begin select case tableOfBeans.beanType when 'B' then 'Beans' when 'L' then 'Legumes' end into var_type from tableOfBeans;end;
Actually, that would generate an error too if you had more than one row in tableOfBeans. Maybe what you wanted was to retrieve items from tableOfBeans where tableOfBeans.beanType = var_type. In that case you'd still need a way to store the result set. Sorry if I'm not understanding what you're trying to do. A little more detail will help.
The CASE
statement doesn't require an INTO
.
ORA-6550 is a generic error for when your SQL doesn't compile. The error is reporting that it thinks the issue is there's no INTO
clause because it thinks you're trying to perform a SELECT INTO statement, like this:
SELECT t.column INTO var_type FROM tableOfBeans
I don't have an Oracle install to test against, but I have experienced Oracle 9i/10g being weird with CASE statements, sometimes requiring you to use END CASE
rather than just END
. END CASE
is mentioned in the Oracle documentation here.
Usually you'd use DUAL for this sort of thing, testing if the variable is set:
var_type := 'B';SELECT CASE var_type WHEN 'B' then 'Beans' WHEN 'L' then 'Legumes' END CASE FROM DUAL;
As answered before the errors says that you have to put the result of the select into a variable.
declare var_type VARCHAR2(10); var_into VARCHAR2(10);begin var_type := 'B'; select case var_type when 'B' then 'Beans' when 'L' then 'Legumes' end into var_into from tableOfBeans;end;
If your table tableOfBeans contains more than one row you will run into another error ORA-01422: exact fetch returns more than one row. Use pseudo table dual instead or following pl/sql code.
declare var_type VARCHAR2(10); var_into VARCHAR2(10);begin var_type := 'B'; var_into := case var_type when 'B' then 'Beans' when 'L' then 'Legumes' end;end;