Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Multiple IF conditions is not executing procedure in Oracle

I have a stored procedure where I want to check multiple IF condtions. SO I wrote the below query. But it’s not compiling and giving error as

Error(97,5): PLS-00103: Encountered the symbol "IF" when expecting one of the following: ; The symbol "IF" was ignored.

PROCEDURE GET_SPAN_BY_MZ
(
  PUSERTYPE IN NVARCHAR2,
  POPERATIONTYPE IN NVARCHAR2,
  PSPANTYPE IN NVARCHAR2,
  PMAINTZONECODE IN VARCHAR2,  
  PSPANDATA OUT SYS_REFCURSOR
)

AS
--SQLSTM VARCHAR2 (2000);

BEGIN

IF PUSERTYPE = 'Construction_Engineer_OL' OR PUSERTYPE = 'NHQ-PMO' THEN
      BEGIN       
       IF POPERATIONTYPE = 'NEW' THEN
         BEGIN
         IF PSPANTYPE = 'INTERCITY' THEN
              BEGIN
OPEN PSPANDATA FOR
                 
SELECT  TO_CHAR(TRIM(RJ_SPAN_ID)) AS SPAN_ID,
        TO_CHAR(RJ_MAINTENANCE_ZONE_CODE) AS MAINT_ZONE_CODE 
FROM NE.MV_SPAN@NE
WHERE LENGTH(TRIM(RJ_SPAN_ID)) = 21
  AND REGEXP_LIKE(TRIM(RJ_SPAN_ID), 
      'SP(N|Q|R|S).*+_(MP|AC|BN|BS|DN|DP|ID|LA|MS|MT|MU|OG|OL|PG|RC|RG|RT|VF|VT|YH)$','i')                                  
  AND NOT REGEXP_LIKE (NVL(RJ_INTRACITY_LINK_ID,'-'),'_(9)','i') 
  AND INVENTORY_STATUS_CODE = 'IPL'
  AND RJ_MAINTENANCE_ZONE_CODE = PMAINTZONECODE

INTERSECT

select rj_span_id, rj_maintenance_zone_code 
from ne.mv_transmedia@ne
where inventory_Status_code = 'IPL'
  and LENGTH(TRIM(RJ_SPAN_ID)) = 21
  AND REGEXP_LIKE(TRIM(RJ_SPAN_ID), 
      'SP(N|Q|R|S).*+_(MP|AC|BN|BS|DN|DP|ID|LA|MS|MT|MU|OG|OL|PG|RC|RG|RT|VF|VT|YH)$','i')
  AND NOT REGEXP_LIKE (NVL(RJ_INTRACITY_LINK_ID,'-'),'_(9)','i')
  AND RJ_MAINTENANCE_ZONE_CODE = PMAINTZONECODE;   
  
END IF;

END IF;

END GET_SPAN_BY_MZ;

Please let me know where I am wrong.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

Use AND (rather than multiple IFs):

PROCEDURE GET_SPAN_BY_MZ
(
  PUSERTYPE      IN NVARCHAR2,
  POPERATIONTYPE IN NVARCHAR2,
  PSPANTYPE      IN NVARCHAR2,
  PMAINTZONECODE IN VARCHAR2,  
  PSPANDATA      OUT SYS_REFCURSOR
)
AS
BEGIN
  IF     PUSERTYPE IN ('Construction_Engineer_OL', 'NHQ-PMO')
     AND POPERATIONTYPE = 'NEW'
     AND PSPANTYPE = 'INTERCITY'
  THEN
    OPEN PSPANDATA FOR
    SELECT  TO_CHAR(TRIM(RJ_SPAN_ID)) AS SPAN_ID,
            TO_CHAR(RJ_MAINTENANCE_ZONE_CODE) AS MAINT_ZONE_CODE 
    FROM    NE.MV_SPAN@NE
    WHERE   LENGTH(TRIM(RJ_SPAN_ID)) = 21
    AND     REGEXP_LIKE(
              TRIM(RJ_SPAN_ID), 
              'SP(N|Q|R|S).*+_(MP|AC|BN|BS|DN|DP|ID|LA|MS|MT|MU|OG|OL|PG|RC|RG|RT|VF|VT|YH)$',
              'i'
            )                                  
    AND     NOT REGEXP_LIKE (NVL(RJ_INTRACITY_LINK_ID,'-'),'_(9)','i') 
    AND     INVENTORY_STATUS_CODE = 'IPL'
    AND     RJ_MAINTENANCE_ZONE_CODE = PMAINTZONECODE
  INTERSECT
    select  rj_span_id, rj_maintenance_zone_code 
    from    ne.mv_transmedia@ne
    where   inventory_Status_code = 'IPL'
    and     LENGTH(TRIM(RJ_SPAN_ID)) = 21
    AND     REGEXP_LIKE(
              TRIM(RJ_SPAN_ID), 
              'SP(N|Q|R|S).*+_(MP|AC|BN|BS|DN|DP|ID|LA|MS|MT|MU|OG|OL|PG|RC|RG|RT|VF|VT|YH)$',
              'i'
            )
    AND     NOT REGEXP_LIKE (NVL(RJ_INTRACITY_LINK_ID,'-'),'_(9)','i')
    AND     RJ_MAINTENANCE_ZONE_CODE = PMAINTZONECODE;   
  END IF;
END GET_SPAN_BY_MZ;

If you do want to use multiple IFs then make sure there is a matching END IF; for every IF and a matching END; for each BEGIN.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading