Reputation: 349
Apex 4.2
I have the following pl/sql code block below but whenever I run it in APex, I keep getting the error:
ORA-06550: line 35, column 4: PLS-00103: Encountered the symbol ";" when expecting one of the following: if
DECLARE
show_changes BOOLEAN;
l_exists INTEGER;
BEGIN
Select count(*) into l_exists
From dba_role_privs
where grantee = upper(:APP_USER) and
(granted_role = 'SURVEY_JOB_SUID' or granted_role = 'SURVEY_SUID');
IF l_exists = 0 THEN /* unauthorized */
IF :P32_SURVEY_JOB_REQUEST_ID IS NOT NULL AND (:P32_SUBMISSION_DATE IS NULL AND :P32_LOCK_DATE IS NULL) THEN
show_changes := TRUE;
IF :P32_SURVEY_JOB_REQUEST_ID IS NOT NULL AND (:P32_SUBMISSION_DATE IS NOT NULL AND :P32_LOCK_DATE IS NULL) THEN
show_changes := TRUE;
IF :P32_SURVEY_JOB_REQUEST_ID IS NOT NULL AND (:P32_SUBMISSION_DATE IS NOT NULL AND :P32_LOCK_DATE IS NOT NULL) THEN
show_changes := FALSE;
END IF;
ELSE /* authorized */
IF :P32_SURVEY_JOB_REQUEST_ID IS NOT NULL AND (:P32_SUBMISSION_DATE IS NULL AND :P32_LOCK_DATE IS NULL) THEN
show_changes := TRUE;
IF :P32_SURVEY_JOB_REQUEST_ID IS NOT NULL AND (:P32_SUBMISSION_DATE IS NOT NULL AND :P32_LOCK_DATE IS NULL) THEN
show_changes := TRUE;
IF :P32_SURVEY_JOB_REQUEST_ID IS NOT NULL AND (:P32_SUBMISSION_DATE IS NOT NULL AND :P32_LOCK_DATE IS NOT NULL) THEN
show_changes := TRUE;
END IF;
Return show_changes;
END;
I'm not sure what the problem is. Any help would be greatly appreciated. Thanks in advance.
Upvotes: 0
Views: 1864
Reputation: 231861
An IF
always has to be paired with an END IF
and the ELSE
comes before the END IF
. If you want to have three separate IF
statements in each of two branches in your outer IF
, you'd want something like
IF l_exists = 0
THEN
IF :P32_SURVEY_JOB_REQUEST_ID IS NOT NULL AND
(:P32_SUBMISSION_DATE IS NULL AND :P32_LOCK_DATE IS NULL)
THEN
show_changes := TRUE;
END IF;
IF :P32_SURVEY_JOB_REQUEST_ID IS NOT NULL AND
(:P32_SUBMISSION_DATE IS NOT NULL AND :P32_LOCK_DATE IS NULL)
THEN
show_changes := TRUE;
END IF;
IF :P32_SURVEY_JOB_REQUEST_ID IS NOT NULL AND
(:P32_SUBMISSION_DATE IS NOT NULL AND :P32_LOCK_DATE IS NOT NULL)
THEN
show_changes := FALSE;
END IF;
ELSE
<<repeat the pattern>>
END IF;
My guess, however, is that you really don't want to have three separate IF
statements in each branch. My guess is that you want a single IF
statement with an ELSIF
IF l_exists = 0
THEN
IF :P32_SURVEY_JOB_REQUEST_ID IS NOT NULL AND
(:P32_SUBMISSION_DATE IS NULL AND :P32_LOCK_DATE IS NULL)
THEN
show_changes := TRUE;
ELSIF :P32_SURVEY_JOB_REQUEST_ID IS NOT NULL AND
(:P32_SUBMISSION_DATE IS NOT NULL AND :P32_LOCK_DATE IS NULL)
THEN
show_changes := TRUE;
ELSIF :P32_SURVEY_JOB_REQUEST_ID IS NOT NULL AND
(:P32_SUBMISSION_DATE IS NOT NULL AND :P32_LOCK_DATE IS NOT NULL)
THEN
show_changes := FALSE;
END IF;
ELSE
<<repeat the pattern>>
END IF;
Upvotes: 3