Eu tenho um procedimento armazenado onde desejo verificar várias IF
condições. Então eu escrevi a consulta abaixo. Mas não está compilando e dando erro como
Erro (97,5): PLS-00103: Encontrou o símbolo "IF" ao esperar um dos seguintes: ; O símbolo “SE” foi ignorado.
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;
Por favor, deixe-me saber onde estou errado.
Use
AND
(em vez de váriosIF
s):Se você quiser usar vários
IF
s, certifique-se de que haja uma correspondênciaEND IF;
para cadaIF
e uma correspondênciaEND;
para cada umBEGIN
.