I'm trying to run different code based on the db instance using an if statement but I keep getting this error:
Error report - ORA-06550: line 9, column 8: PLS-00428: an INTO clause is expected in this SELECT statement 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action:
I'm trying to use a system variable to determine if i'm in prod, qa, dev, then run various statements based on where I am.
This is what I've tried:
DECLARE
ENV VARCHAR(256);
BEGIN
SELECT sys_context('USERENV','DB_NAME') AS Instance
INTO ENV
FROM dual;
IF ENV = 'CSTMP' THEN
CREATE MV_TEST_CSTMP ...;
ELSIF ENV = 'PROD' THEN
CREATE MV_TEST_PROD ...;
ELSE
CREATE MV_DEFAULT ...;
END IF;
END;
But I get: PLS-00428: an INTO clause is expected in this SELECT statement
EDIT: I've also tried this
VAR ENV VARCHAR(255);
SELECT sys_context('USERENV','DB_NAME') AS Instance
INTO ENV
FROM DUAL;
IF ENV = 'CSTMP' THEN
execute immediate 'CREATE MATERIALIZED VIEW TEST_CSTMP
USING INDEX
REFRESH
NEXT trunc(SYSDATE, ''hh'') + 1/24
FORCE
USING DEFAULT LOCAL ROLLBACK SEGMENT
ENABLE QUERY REWRITE AS
SELECT count(m.work_ownerid)
FROM MV_WWORK_SHRUNK m
WHERE WORK_STATUS = 2';
ELSIF ENV = 'PROD' THEN
execute immediate 'CREATE MATERIALIZED VIEW PROD
USING INDEX
REFRESH
NEXT trunc(SYSDATE, ''hh'') + 1/24
FORCE
USING DEFAULT LOCAL ROLLBACK SEGMENT
ENABLE QUERY REWRITE AS
SELECT count(m.work_ownerid)
FROM MV_WWORK_SHRUNK m
WHERE WORK_STATUS = 3';
ELSE
execute immediate 'CREATE MATERIALIZED VIEW TEST_ELSE
USING INDEX
REFRESH
NEXT trunc(SYSDATE, ''hh'') + 1/24
FORCE
USING DEFAULT LOCAL ROLLBACK SEGMENT
ENABLE QUERY REWRITE AS
SELECT count(m.work_ownerid)
FROM MV_WWORK_SHRUNK m
WHERE WORK_STATUS = 4';
END IF;
: ORA-00933: SQL command not properly ended 00933. 00000 - "SQL command not properly ended"
execute immediatecommand to create your views. However, you should get a different error code for this mistake, not the one you reported. Is that the EXACT code you are running? - mathguy