ora 936

Iniciado por crisoof, 9 Febrero 2015, 14:14 PM

0 Miembros y 1 Visitante están viendo este tema.

crisoof

Hola buenos dias, queria ver si me podian ayudar, tengo el siguiente problema,
Tengo un store procedure (SP) que puede crea cualquiera de 5 esquemas distintos (pero los genera 1 cada vez que se la lanza el proceso), desde las las Pk's, los datos hasta las Fk's, el SP consiste en partes estáticas y otras dinamicas, según el esquema, bueno el error esta al momento de insertar la data en los esquemas de colombia y uruguay, este mismo SP puede crear sin problemas los esquemas de argentina chile y peru, el erro precisamente me lo indica en la parte estática, en la parte que inserta la data para las tablas, que se supone en todos los esquemas son iguales me aparece el error  ora 936 indicandome que me falta una expresion pero es el mismo codigo que se usa y funciona en Chile, Peru o Argentina, pero para cualquiera de los otros dos esquemas, Colombia o Uruguay aparece ese error, les muestro el codigo, ojo que esto es un SP de prueba, tiene cursores, que se usan para otras cosas, y no se estan usando aqui
la tabla prueba esta creada de esta forma

PROMPT CREATE TABLE comuna
CREATE TABLE comuna (
  id_provincia        NUMBER(5,0)   NULL,
  lat                 NUMBER(11,8)  NULL,
  lon                 NUMBER(11,8)  NULL,
  id_centro_urbano    NUMBER(4,0)   NULL,
  cod_subdere         VARCHAR2(5)   NULL,
  id_comuna           NUMBER(4,0)   NULL,
  id_region           VARCHAR2(4)   NULL,
  nombre_comuna       VARCHAR2(300) NULL,
  poblacion_rural     NUMBER        NULL,
  poblacion_urbana    NUMBER        NULL,
  poblacion_ult_censo NUMBER        NULL,
  codigo_ine          VARCHAR2(10)  NULL
)
/


GRANT ALTER,DEBUG,DELETE,FLASHBACK,INDEX,INSERT,ON COMMIT REFRESH,QUERY REWRITE,REFERENCES,SELECT,UPDATE ON comuna TO configuracion;



esta query llena la tabla comuna, y me aparece el error, indicandome que esta query me falta una expresion, pero no entiendo, que sucede

PROMPT CREATE OR REPLACE PROCEDURE prueba
CREATE OR REPLACE PROCEDURE prueba(szPAIS IN VARCHAR2)
AS
lpNIVEL3 NUMBER(2,0);
lpNIVEL2 NUMBER(2,0);
lpNIVEL1 NUMBER(2,0);
lpNIVEL5 NUMBER(2,0);
SQL_STR VARCHAR2(1000);
lpCOD_PAIS NUMBER(3,0);
lpNIVEL    NUMBER(3,0);

CURSOR C_TAB_FK IS
                  SELECT TABLE_NAME, OWNER, CONSTRAINT_NAME NOMBRE_FK
                    FROM CONFIGURACION.CONSTRAINTS
                   WHERE CONSTRAINT_TYPE = 'R'
                     AND OWNER = szPAIS
                     AND TABLE_NAME IN (SELECT DISTINCT TABLE_NAME
                                          FROM CONFIGURACION.MAPPAIS_COLUMN
                                         WHERE ESQUEMA =szPAIS
                                           AND FK <> 'N'
                                         )
                     AND CONSTRAINT_NAME <>'AMARRE_DIRECCIONES_AMARRE_FK1'
                    ORDER BY TABLE_NAME;

-- CONTIENE LAS COLUMNAS DE UNA TABLA DONDE SE CREARA LA FK
-- CAMPO FK CONTIENE EL NOMBRE DE LA TABLA QUE SE REFERENCIA
CURSOR C_COL_FK IS
               SELECT COLUMN_NAME, FK, CONSTRAINTS_NAME
                 FROM MAPPAIS_COLUMN
                WHERE FK <> 'N'
                  AND CONSTRAINTS_NAME IN(SELECT NOMBRE
                          FROM CONFIGURACION.MAPPAIS_CNS_LIST)
                  AND ESQUEMA = szPAIS;


--- CONTIENE LAS COLUMNAS QUE SE REFERENCIAN
CURSOR C_COLPRI_FK IS
               SELECT COLUMN_REF
                 FROM MAPPAIS_COLUMN
                WHERE FK <> 'N'
                  AND CONSTRAINTS_NAME IN(SELECT NOMBRE
                          FROM CONFIGURACION.MAPPAIS_CNS_LIST)
                  AND ESQUEMA = szPAIS;

--CURSOR PARA CREAR LAS TABLAS CONTIENE LOS  NOMBRES DE LAS TABLAS DE 'X' ESQUEMA
CURSOR C_TAB IS
               SELECT
                      DISTINCT ESQUEMA,TABLE_NAME
                 FROM
                      CONFIGURACION.MAPPAIS_COLUMN
                WHERE ESQUEMA = szPAIS;

-- CONTIENE LAS COLUMNAS DE UNA TABLA DE 'X' ESQUEMA
        CURSOR C_COL IS
               SELECT
                      ESQUEMA, TABLE_NAME, COLUMN_NAME, TYPE_COLUMN
                 FROM
                      CONFIGURACION.MAPPAIS_COLUMN
                WHERE ESQUEMA = szPAIS
                  AND TABLE_NAME IN(SELECT TABLE_NAME FROM CONFIGURACION.MAPPAIS_TAB_LIST);

--
CURSOR C_TAB_PK IS
                  SELECT TABLE_NAME, OWNER, CONSTRAINT_NAME NOMBRE_PK
                    FROM CONFIGURACION.CONSTRAINTS
                   WHERE CONSTRAINT_TYPE = 'P'
                     AND OWNER = szPAIS
                     AND TABLE_NAME IN ((SELECT DISTINCT TABLE_NAME
                                          FROM CONFIGURACION.MAPPAIS_COLUMN
                                         WHERE ESQUEMA =szPAIS
                                           AND PK = 'Y'));

-- CONTIENE LAS COLUMNAS DE UNA TABLA
CURSOR C_COL_PK IS
               SELECT COLUMN_NAME
                 FROM MAPPAIS_COLUMN
                WHERE PK = 'Y'
                  AND TABLE_NAME IN(SELECT TABLE_NAME
                          FROM CONFIGURACION.MAPPAIS_TAB_LIST)
                  AND ESQUEMA = szPAIS;



--- VARIABLES QUE MANEJAN LA CREACION DE LA QUERY PARA LAS FK
        R_TAB_FK    C_TAB_FK%ROWTYPE;
        R_COL_FK    C_COL_FK%ROWTYPE;
        R_COL_FKPRI C_COLPRI_FK%ROWTYPE;

---VARIABLE QUE ALMACENA EL STRING, CON LA INSTRUCCION DE CREACION DE LAS FK
szQURYFK VARCHAR2(10000);

---VARIABLES QUE MANEJAN CURSORES PARA PK
        R_TAB_PK C_TAB_PK%ROWTYPE;
        R_COL_PK C_COL_PK%ROWTYPE;
        szQURY VARCHAR2(10000);

--- VARIABLES QUE MANEJAN LA CREACION DE LAS TABLAS
        R_TAB C_TAB%ROWTYPE;
        R_COL C_COL%ROWTYPE;
        szQUERY VARCHAR2(10000);
        szTAB VARCHAR2(100);
----------------------------------------


---VARIABLES QUE MANEJAN LA CREACION DE LAS PK
szQRY VARCHAR2(10000);

BEGIN
lpNIVEL5    :=5;
lpNIVEL3    :=3;
lpNIVEL2    :=2;
lpNIVEL1    :=1;
lpCOD_PAIS  :=598;
lpNIVEL     :=3;

--------------------------------------------------------------------------------
--COMUNA
EXECUTE IMMEDIATE 'ALTER TABLE '||SZPAIS||'.COMUNA NOLOGGING';
EXECUTE IMMEDIATE 'INSERT /* + APPEND */ INTO '||SZPAIS||'.COMUNA (NOMBRE_COMUNA, ID_CENTRO_URBANO, CODIGO_INE, LAT, LON, ID_COMUNA
                  ,ID_PROVINCIA, ID_REGION, COD_SUBDERE, POBLACION_ULT_CENSO, POBLACION_URBANA, POBLACION_RURAL)
       SELECT
                  DISTINCT
                  CAST (B.NOMBRE_DIV_GEO AS VARCHAR2(50))       AS NOMBRE_COMUNA,
                  CAST (C.ID_CENTRO_URBANO AS NUMBER(4,0))      AS ID_CENTRO_URBANO,
                  CAST (NULL AS VARCHAR2(10))                   AS CODIGO_INE,
                  CAST (B.LAT AS NUMBER(11,8))                  AS LAT,
                  CAST (B.LON AS NUMBER(11,8))                  AS LON,
                  CAST (B.ID_DIV_GEO AS NUMBER(4,0))            AS ID_COMUNA,
                  CAST (Z.ID_PROVINCIA AS NUMBER(5,0))          AS ID_PROVINCIA,
                  CAST (Z.ID_REGION AS VARCHAR2(3))             AS ID_REGION,
                  CAST (B.CODIGO_SUBDERE AS VARCHAR2(5))        AS COD_SUBDERE,
                  CAST (B.POBLACION_ULT_CENSO AS NUMBER(12,0))  AS POBLACION_ULT_CENSO,
                  CAST (B.POBLACION_URBANA AS NUMBER(12,0))     AS POBLACION_URBANA,
                  CAST (B.POBLACION_RURAL AS NUMBER(12,0))      AS POBLACION_RURAL
         FROM     FOTOFULL_LATAM_1.DIVISION_GEOPOLITICA B
   INNER JOIN     FOTOFULL_LATAM_1.CENTRO_URBANO C
           ON     B.ID_CENTRO_URBANO = C.ID_CENTRO_URBANO
          AND     B.COD_PAIS = C.COD_PAIS
   INNER JOIN     (    SELECT P.ID_DIV_GEO,
                              P.ID_DIV_GEO AS ID_PROVINCIA,
                              R.ID_DIV_GEO_OLD AS ID_REGION
                        FROM  FOTOFULL_LATAM_1.DIVISION_GEOPOLITICA P
                  INNER JOIN  FOTOFULL_LATAM_1.DIVISION_GEOPOLITICA R
                          ON  P.ID_DIV_GEO_PADRE = R.ID_DIV_GEO
                         AND  P.COD_PAIS         = R.COD_PAIS
                         AND  P.COD_PAIS = '||LPCOD_PAIS||'
                         AND  P.ID_NIVEL = '||LPNIVEL3||'
                         AND  R.ID_NIVEL ='||LPNIVEL2||'
                   ) Z
           ON     B.ID_DIV_GEO_PADRE = Z.ID_DIV_GEO
          AND     B.COD_PAIS ='||LPCOD_PAIS||'
          AND     B.ID_NIVEL = '||LPNIVEL||'';
COMMIT ;


END;
/


Esa es mi pregunta, ojala me puedan echar una mano, debe ser algo super tonto, pero estoy tan mareado con el SP, que no lo veo seguramente, Gracias ::) :(