
PL/SQL - PLS-00103: Encountered the symbol "CURSOR" when expecting one of the following
Publicado por Jorman (1 intervención) el 21/08/2013 16:12:41
Buenas, saludos desde Venezuela,
Estoy iniciándome en plsql y estoy creando un pequeño proceso para extraer una data, mis dudas son muchas y quisiera pedir su colaboración en ver que esta mal del codigo o en la lógica ya que no conozco mucho, les envio el codigo ya que al intentar ejecutarlo me indica este error:
ORA-06550: line 34, column 5:
PLS-00103: Encountered the symbol "CURSOR" when expecting one of the following:
Aqui esta el codigo:
DECLARE
-- Rq. 26971
l_linea VARCHAR2 (800);
l_file_salida UTL_FILE.file_type;
l_file_salida2 UTL_FILE.file_type;
l_directory_salida VARCHAR2 (50);
l_filename_salida VARCHAR2 (50);
l_filename_salida2 VARCHAR2 (50);
l_abe PS_BO_ABE_DTL.ABE_SEQ%TYPE;
l_rbtacctid PS_CTV_INS_SERVICI.RBTACCTID%TYPE;
l_rbtacctid_2 PS_RBT_ACCOUNT.RBTACCTID%TYPE;
l_rbtphonenumber PS_CTV_INS_SERVICI.RBTPHONENUMBER%TYPE;
l_bo_id PS_RBT_ACCOUNT.BO_ID%TYPE;
l_role_type_id_cust PS_RBT_ACCOUNT.ROLE_TYPE_ID_CUST%TYPE;
l_cust_id PS_BC.CUST_ID%TYPE;
l_bo_name PS_BO_NAME.BO_NAME%TYPE;
l_phone PS_BO_CI_PHONE_VW.PHONE%TYPE;
l_cm_purpose_type_id PS_BO_CI_PHONE_VW.CM_PURPOSE_TYPE_ID%TYPE;
l_rbtacctid_em PS_CTV_RBT_ACCOUNT.RBTACCTID%TYPE;
l_profile PS_BO_CM.PROFILE_CM_SEQ%TYPE;
l_abe PS_BO_ABE_DTL.ABE_SEQ%TYPE;
l_ctv_categoria PS_CTV_RBT_ACCOUNT.CTV_CATEGORIA%TYPE;
l_phone VARCHAR2(30);
l_fecha VARCHAR2(50);
l_org VARCHAR2(4):='CAPT';
l_clase VARCHAR2(4):='CAPT';
l_central VARCHAR:='NULL'
--
--ID_CUENTAS-TELEFONO CLIENTES MM-EM
CURSOR c1
IS
SELECT DISTINCT a.rbtacctid, a.rbtphonenumber
FROM ps_ctv_ins_servici a
WHERE a.role_type_id_cust IN ('2','9')
AND a.ctv_inst_act = '1'
AND a.ctv_tipo_inst = 'PO'
AND a.rbtphonenumber LIKE '2%'
AND a.rbtacctid BETWEEN '1003000002' AND '1003000009'
ORDER BY a.rbtacctid;
--BO_ID CLIENTES MM-EM
CURSOR c2
IS
SELECT DISTINCT rbtacctid, bo_id, role_type_id_cust
FROM ps_rbt_account
WHERE rbtacctstatus = 'ACT'
AND rbtaccttype = 'IND'
AND rbtbillsysacctid = l_rbtacctid;
--ID CLIENTE
CURSOR c3
IS
SELECT a.cust_id
FROM ps_bc a
WHERE a.bo_id = l_bo_id
and a.do_not_call <> 'Y';
--CUENTAS CLIENTES EMPRESAS
CURSOR c4
IS
SELECT DISTINCT rbtacctid
FROM ps_ctv_rbt_account
WHERE ctv_categoria in ('MAHO','PYJT','PYVC','PYGO')
and rbtacctid=l_rbtacctid_2;
--PROFILE PRINCIPAL
CURSOR c5
IS
SELECT a.profile_cm_seq
FROM ps_bo_cm a, ps_bo_cm_use b, ps_cm c
WHERE a.profile_cm_seq = b.profile_cm_seq
AND a.cm_id = c.cm_id
AND a.bo_cm_start_dt <= SYSDATE
AND a.bo_cm_end_dt >= SYSDATE
AND a.cm_type_id = 1
AND b.cm_use_start_dt <= SYSDATE
AND b.cm_use_end_dt >= SYSDATE
AND b.primary_ind = 'Y'
AND a.bo_id = l_bo_id
AND b.role_type_id IN ('2','9');
--ABE_SEQ_PRINCIPAL
CURSOR c6
IS
SELECT abe_seq
FROM ps_bo_abe_dtl
WHERE bo_id = l_bo_id
AND profile_cm_seq = l_profile;
--TELEFONOS
CURSOR c7
IS
SELECT DISTINCT a.phone,a.cm_purpose_type_id
FROM ps_bo_ci_phone_vw a
WHERE a.bo_id = l_bo_id
AND a.profile_cm_seq IN (
SELECT b.profile_cm_seq
FROM ps_bo_abe_dtl b
WHERE b.bo_id = l_bo_id
AND b.abe_seq = l_abe);
--NOMBRE
CURSOR c8
IS
SELECT a.bo_name
FROM ps_bo_name a
WHERE a.bo_id = l_rbtcust_bo_id
AND primary_ind = 'Y';
--FECHA Y HORA
CURSOR c9 is
select to_char(sysdate,'yyyymmdd_hhmmss') from dual;
BEGIN
l_directory_salida := 'SALIDA_LISTO';
OPEN c9;
FETCH c9 INTO l_fecha;
CLOSE c9;
l_filename_salida := 'CONTACTO_MM_CRM_NAP_'||l_fecha||'.txt';
l_filename_salida2 :='CONTACTO_EM_CRM_NAP_'||l_fecha||'.txt';
l_file_salida := UTL_FILE.fopen (l_directory_salida, l_filename_salida, 'W');
l_file_salida2 := UTL_FILE.fopen (l_directory_salida, l_filename_salida2, 'W');
UTL_FILE.put_line (l_file_salida, 'Inicio proceso');
UTL_FILE.put_line (l_file_salida,'ORGANIZACION' || '|' || 'ID_CLIENTE' || '|' || 'NOMBRE' || '|' || 'TELEFONO' || '|'|| 'CLASE' || '|' || 'CENTRAL');
l_bo_name := '';
l_rbtbillsysacctid := '';
l_rbtphonenumber := '';
l_bo_id:= '';
l_role_type_id_cust:= '';
l_rbtphonenumber:= '';
l_rbtacctid:= '';
l_rbtacctid_2:= '';
l_profile:= '';
l_abe:= '';
l_phone:= '';
l_cm_purpose_type_id:= '';
l_cust_id:= '';
l_ctv_categoria:= '';
--
FOR reg IN c1
LOOP
l_rbtacctid:= reg.rbtacctid;
l_rbtphonenumber:= reg.rbtphonenumber;
IF l_rbtacctid IS NOT NULL
THEN
--
FOR reg_1 IN c2
LOOP
l_rbtacctid_2:= reg_1.rbtacctid;
l_bo_id:=reg_1.bo_id;
l_role_type_id_cust:= reg_1.role_type_id_cust;
IF l_role_type_id_cust= '2'
THEN
utl_file.put_line(l_file_salida,l_org ||';'|| l_cust_id ||';'|| l_bo_name ||';'|| l_phone ||';'|| l_clase ||';'|| l_central);
ELSIF l_role_type_id_cust= '9'
THEN
utl_file.put_line(l_file_salida2,l_org ||';'|| l_cust_id ||';'|| l_bo_name ||';'|| l_phone ||';'|| l_clase ||';'|| l_central);
END IF;
IF l_bo_id > 0
THEN
--DBMS_OUTPUT.put_line (l_bo_id);
--
OPEN c3;
FETCH c3 INTO l_cust_id;
CLOSE c3;
IF l_cust_id IS NOT NULL
THEN
--
OPEN c4;
FETCH c4 INTO l_cuenta;
CLOSE c4;
IF l_cuenta IS NOT NULL
THEN
--
OPEN c5;
FETCH c5 INTO l_profile;
CLOSE c5;
--
OPEN c6;
FETCH c6 INTO l_abe;
CLOSE c6;
--
FOR reg_2 IN c7
LOOP
l_phone:= reg_2.phone;
l_cm_purpose_type_id:= reg_2.cm_purpose_type_id;
IF l_cm_purpose_type_id= 12
THEN
utl_file.put_line(l_file_salida,l_org ||';'|| l_cust_id ||';'|| l_bo_name ||';'|| l_phone ||';'|| l_clase ||';'|| l_central);
ELSIF l_phone LIKE '042%' OR '041%' OR '42%' OR '41%'
THEN
utl_file.put_line(l_file_salida,l_org ||';'|| l_cust_id ||';'|| l_bo_name ||';'|| l_phone ||';'|| l_clase ||';'|| l_central);
END IF;
END LOOP;
UTL_FILE.put_line (l_file_salida, l_org ||';'|| l_cust_id ||';'|| l_bo_name ||';'|| l_phone ||';'|| l_clase ||';'|| l_central);
--
END IF;
END IF;
END IF;
END LOOP;
END IF;
END LOOP;
--
UTL_FILE.put_line (l_file_salida,'Fin proceso');
UTL_FILE.put_line (l_file_salida2,'Fin proceso');
UTL_FILE.fclose (l_file_salida);
UTL_FILE.fclose (l_file_salida2);
--
END;
Gracias...................
Estoy iniciándome en plsql y estoy creando un pequeño proceso para extraer una data, mis dudas son muchas y quisiera pedir su colaboración en ver que esta mal del codigo o en la lógica ya que no conozco mucho, les envio el codigo ya que al intentar ejecutarlo me indica este error:
ORA-06550: line 34, column 5:
PLS-00103: Encountered the symbol "CURSOR" when expecting one of the following:
Aqui esta el codigo:
DECLARE
-- Rq. 26971
l_linea VARCHAR2 (800);
l_file_salida UTL_FILE.file_type;
l_file_salida2 UTL_FILE.file_type;
l_directory_salida VARCHAR2 (50);
l_filename_salida VARCHAR2 (50);
l_filename_salida2 VARCHAR2 (50);
l_abe PS_BO_ABE_DTL.ABE_SEQ%TYPE;
l_rbtacctid PS_CTV_INS_SERVICI.RBTACCTID%TYPE;
l_rbtacctid_2 PS_RBT_ACCOUNT.RBTACCTID%TYPE;
l_rbtphonenumber PS_CTV_INS_SERVICI.RBTPHONENUMBER%TYPE;
l_bo_id PS_RBT_ACCOUNT.BO_ID%TYPE;
l_role_type_id_cust PS_RBT_ACCOUNT.ROLE_TYPE_ID_CUST%TYPE;
l_cust_id PS_BC.CUST_ID%TYPE;
l_bo_name PS_BO_NAME.BO_NAME%TYPE;
l_phone PS_BO_CI_PHONE_VW.PHONE%TYPE;
l_cm_purpose_type_id PS_BO_CI_PHONE_VW.CM_PURPOSE_TYPE_ID%TYPE;
l_rbtacctid_em PS_CTV_RBT_ACCOUNT.RBTACCTID%TYPE;
l_profile PS_BO_CM.PROFILE_CM_SEQ%TYPE;
l_abe PS_BO_ABE_DTL.ABE_SEQ%TYPE;
l_ctv_categoria PS_CTV_RBT_ACCOUNT.CTV_CATEGORIA%TYPE;
l_phone VARCHAR2(30);
l_fecha VARCHAR2(50);
l_org VARCHAR2(4):='CAPT';
l_clase VARCHAR2(4):='CAPT';
l_central VARCHAR:='NULL'
--
--ID_CUENTAS-TELEFONO CLIENTES MM-EM
CURSOR c1
IS
SELECT DISTINCT a.rbtacctid, a.rbtphonenumber
FROM ps_ctv_ins_servici a
WHERE a.role_type_id_cust IN ('2','9')
AND a.ctv_inst_act = '1'
AND a.ctv_tipo_inst = 'PO'
AND a.rbtphonenumber LIKE '2%'
AND a.rbtacctid BETWEEN '1003000002' AND '1003000009'
ORDER BY a.rbtacctid;
--BO_ID CLIENTES MM-EM
CURSOR c2
IS
SELECT DISTINCT rbtacctid, bo_id, role_type_id_cust
FROM ps_rbt_account
WHERE rbtacctstatus = 'ACT'
AND rbtaccttype = 'IND'
AND rbtbillsysacctid = l_rbtacctid;
--ID CLIENTE
CURSOR c3
IS
SELECT a.cust_id
FROM ps_bc a
WHERE a.bo_id = l_bo_id
and a.do_not_call <> 'Y';
--CUENTAS CLIENTES EMPRESAS
CURSOR c4
IS
SELECT DISTINCT rbtacctid
FROM ps_ctv_rbt_account
WHERE ctv_categoria in ('MAHO','PYJT','PYVC','PYGO')
and rbtacctid=l_rbtacctid_2;
--PROFILE PRINCIPAL
CURSOR c5
IS
SELECT a.profile_cm_seq
FROM ps_bo_cm a, ps_bo_cm_use b, ps_cm c
WHERE a.profile_cm_seq = b.profile_cm_seq
AND a.cm_id = c.cm_id
AND a.bo_cm_start_dt <= SYSDATE
AND a.bo_cm_end_dt >= SYSDATE
AND a.cm_type_id = 1
AND b.cm_use_start_dt <= SYSDATE
AND b.cm_use_end_dt >= SYSDATE
AND b.primary_ind = 'Y'
AND a.bo_id = l_bo_id
AND b.role_type_id IN ('2','9');
--ABE_SEQ_PRINCIPAL
CURSOR c6
IS
SELECT abe_seq
FROM ps_bo_abe_dtl
WHERE bo_id = l_bo_id
AND profile_cm_seq = l_profile;
--TELEFONOS
CURSOR c7
IS
SELECT DISTINCT a.phone,a.cm_purpose_type_id
FROM ps_bo_ci_phone_vw a
WHERE a.bo_id = l_bo_id
AND a.profile_cm_seq IN (
SELECT b.profile_cm_seq
FROM ps_bo_abe_dtl b
WHERE b.bo_id = l_bo_id
AND b.abe_seq = l_abe);
--NOMBRE
CURSOR c8
IS
SELECT a.bo_name
FROM ps_bo_name a
WHERE a.bo_id = l_rbtcust_bo_id
AND primary_ind = 'Y';
--FECHA Y HORA
CURSOR c9 is
select to_char(sysdate,'yyyymmdd_hhmmss') from dual;
BEGIN
l_directory_salida := 'SALIDA_LISTO';
OPEN c9;
FETCH c9 INTO l_fecha;
CLOSE c9;
l_filename_salida := 'CONTACTO_MM_CRM_NAP_'||l_fecha||'.txt';
l_filename_salida2 :='CONTACTO_EM_CRM_NAP_'||l_fecha||'.txt';
l_file_salida := UTL_FILE.fopen (l_directory_salida, l_filename_salida, 'W');
l_file_salida2 := UTL_FILE.fopen (l_directory_salida, l_filename_salida2, 'W');
UTL_FILE.put_line (l_file_salida, 'Inicio proceso');
UTL_FILE.put_line (l_file_salida,'ORGANIZACION' || '|' || 'ID_CLIENTE' || '|' || 'NOMBRE' || '|' || 'TELEFONO' || '|'|| 'CLASE' || '|' || 'CENTRAL');
l_bo_name := '';
l_rbtbillsysacctid := '';
l_rbtphonenumber := '';
l_bo_id:= '';
l_role_type_id_cust:= '';
l_rbtphonenumber:= '';
l_rbtacctid:= '';
l_rbtacctid_2:= '';
l_profile:= '';
l_abe:= '';
l_phone:= '';
l_cm_purpose_type_id:= '';
l_cust_id:= '';
l_ctv_categoria:= '';
--
FOR reg IN c1
LOOP
l_rbtacctid:= reg.rbtacctid;
l_rbtphonenumber:= reg.rbtphonenumber;
IF l_rbtacctid IS NOT NULL
THEN
--
FOR reg_1 IN c2
LOOP
l_rbtacctid_2:= reg_1.rbtacctid;
l_bo_id:=reg_1.bo_id;
l_role_type_id_cust:= reg_1.role_type_id_cust;
IF l_role_type_id_cust= '2'
THEN
utl_file.put_line(l_file_salida,l_org ||';'|| l_cust_id ||';'|| l_bo_name ||';'|| l_phone ||';'|| l_clase ||';'|| l_central);
ELSIF l_role_type_id_cust= '9'
THEN
utl_file.put_line(l_file_salida2,l_org ||';'|| l_cust_id ||';'|| l_bo_name ||';'|| l_phone ||';'|| l_clase ||';'|| l_central);
END IF;
IF l_bo_id > 0
THEN
--DBMS_OUTPUT.put_line (l_bo_id);
--
OPEN c3;
FETCH c3 INTO l_cust_id;
CLOSE c3;
IF l_cust_id IS NOT NULL
THEN
--
OPEN c4;
FETCH c4 INTO l_cuenta;
CLOSE c4;
IF l_cuenta IS NOT NULL
THEN
--
OPEN c5;
FETCH c5 INTO l_profile;
CLOSE c5;
--
OPEN c6;
FETCH c6 INTO l_abe;
CLOSE c6;
--
FOR reg_2 IN c7
LOOP
l_phone:= reg_2.phone;
l_cm_purpose_type_id:= reg_2.cm_purpose_type_id;
IF l_cm_purpose_type_id= 12
THEN
utl_file.put_line(l_file_salida,l_org ||';'|| l_cust_id ||';'|| l_bo_name ||';'|| l_phone ||';'|| l_clase ||';'|| l_central);
ELSIF l_phone LIKE '042%' OR '041%' OR '42%' OR '41%'
THEN
utl_file.put_line(l_file_salida,l_org ||';'|| l_cust_id ||';'|| l_bo_name ||';'|| l_phone ||';'|| l_clase ||';'|| l_central);
END IF;
END LOOP;
UTL_FILE.put_line (l_file_salida, l_org ||';'|| l_cust_id ||';'|| l_bo_name ||';'|| l_phone ||';'|| l_clase ||';'|| l_central);
--
END IF;
END IF;
END IF;
END LOOP;
END IF;
END LOOP;
--
UTL_FILE.put_line (l_file_salida,'Fin proceso');
UTL_FILE.put_line (l_file_salida2,'Fin proceso');
UTL_FILE.fclose (l_file_salida);
UTL_FILE.fclose (l_file_salida2);
--
END;
Gracias...................
Valora esta pregunta


0