Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Modificar un Store Procedure (https://www.clubdelphi.com/foros/showthread.php?t=32019)

Ricardo León 24-05-2006 16:18:39

Modificar un Store Procedure
 
Hola a todos.

Estoy intentando modificar un Store Procedure utilizando la sentencia
ALTER PROCEDURE .....
Al ejecutarlo me sale el siguiente error
Cita:

ISC ERROR CODE:335544569
ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 10, char 12
END
Statement: CREATE PROCEDURE "SP$REP_FACTURA"
Intente eliminar el Store Procedure y luego volverlo a crear pero me sigue saliendo este error.

El código del Store Procedure es el siguiente
Código:

CREATE PROCEDURE "SP$REP_FACTURA"
(
  "FAC_NUMERO" INTEGER
)
RETURNS
(
  "LINEA" VARCHAR(240)
)
AS
BEGIN EXIT; END ^

ALTER PROCEDURE "SP$REP_FACTURA"
(
  "FAC_NUMERO" INTEGER
)
RETURNS
(
  "LINEA" VARCHAR(240)
)
AS
DECLARE VARIABLE FAC_PREFIJO        VARCHAR(10) ;
  DECLARE VARIABLE FAC_FH_EMISION      TIMESTAMP ;
  DECLARE VARIABLE ESTACION            VARCHAR(16) ;
  DECLARE VARIABLE PRO_CODIGO          VARCHAR(4) ;
  DECLARE VARIABLE LIQ_VEH_ID          VARCHAR(10) ;
  DECLARE VARIABLE LIQ_VEH_FH_ENTRADA  TIMESTAMP ;
  DECLARE VARIABLE LIQ_FH_DESDE        TIMESTAMP ;
  DECLARE VARIABLE LIQ_FH_HASTA        TIMESTAMP ;
  DECLARE VARIABLE LIQ_FH_LIQUIDACION  TIMESTAMP ;
  DECLARE VARIABLE LIQ_TIPO            VARCHAR(15) ;
  DECLARE VARIABLE MEN_NOMBRE          VARCHAR(50) ;
  DECLARE VARIABLE MEN_PLACA          VARCHAR(13) ;
  DECLARE VARIABLE MEN_DESDE          TIMESTAMP ;
  DECLARE VARIABLE MEN_HASTA          TIMESTAMP ;
  DECLARE VARIABLE LDS_COM_CODIGO      VARCHAR(4) ;
  DECLARE VARIABLE LDS_VALOR          NUMERIC(9,2) ;
  DECLARE VARIABLE FAC_SUBTOTAL        NUMERIC(9,2) ;
  DECLARE VARIABLE FAC_TOTAL          NUMERIC(9,2) ;
  DECLARE VARIABLE FIM_IMP_NOMBRE      VARCHAR(20) ;
  DECLARE VARIABLE FIM_IMP_PORCENTAJE  NUMERIC(9,2) ;
  DECLARE VARIABLE FIM_VALOR          NUMERIC(9,2) ;
  DECLARE VARIABLE CONTADOR            INTEGER ;
BEGIN
  /* Busca la factura. */
  SELECT FAC_PREFIJO, FAC_FH_EMISION, FAC_SES_ESTACION, FAC_TOTAL
    FROM TB$FACTURAS
    WHERE FAC_NUMERO = :FAC_NUMERO
    INTO :FAC_PREFIJO, :FAC_FH_EMISION, :ESTACION, :FAC_TOTAL ;
  /* Toma el prefijo de factura. */
  IF ( FAC_PREFIJO IS NULL ) THEN
    FAC_PREFIJO = '' ;
  /* === ENCABEZADO === */
  SELECT CFG_REC_SAL_ENCABEZADO
    FROM TB$CONFIGURACION
    WHERE CFG_ESTACION = :ESTACION
    INTO :LINEA ; SUSPEND ;
  LINEA = '----------------------------------------' ; SUSPEND ;
  LINEA = PADR( 'Factura Nro.', ' ', 19 ) || PADL( FAC_PREFIJO || ' ' || PADL( FAC_NUMERO, '', 10 ), ' ', 21 ) ; SUSPEND ;
  LINEA = PADR( 'Fecha      ', ' ', 30 ) || CAST( FAC_FH_EMISION AS DATE ) ; SUSPEND ;
  LINEA = '----------------------------------------' ; SUSPEND ;
  /* === SI HUBO PARQUEO AGREGA LOS DATOS === */
  PRO_CODIGO = NULL ;
  SELECT DISTINCT( FDT_PRO_CODIGO )
    FROM TB$FACTURA_DETALLE
    WHERE FDT_FAC_NUMERO = :FAC_NUMERO AND FDT_PRO_CODIGO = 'PARQ'
    INTO :PRO_CODIGO ;
  IF ( PRO_CODIGO IS NOT NULL ) THEN BEGIN
    /* === BUSCA LA LIQUIDACION CORRESPONDIENTE === */
    SELECT LIQ_TIPO
      FROM TB$FACTURAS LEFT JOIN TB$LIQUIDACIONES ON LIQ_FAC_NUMERO = FAC_NUMERO
      WHERE FAC_NUMERO = :FAC_NUMERO
      INTO :LIQ_TIPO ;
    /* === FACTURA DE PAGO DE PARQUEO === */
    IF ( LIQ_TIPO IN ( 'Normal', 'Manual', 'Reliquidado', 'Gracia' ) ) THEN BEGIN
      SELECT LIQ_FH_DESDE, LIQ_FH_HASTA, LIQ_VEH_ID, LIQ_VEH_FH_ENTRADA, LIQ_FH_LIQUIDACION
        FROM TB$LIQUIDACIONES LEFT JOIN TB$VEHICULOS ON ( LIQ_VEH_ID = VEH_ID AND LIQ_VEH_FH_ENTRADA = VEH_FH_ENTRADA )
        WHERE LIQ_FAC_NUMERO = :FAC_NUMERO
        INTO :LIQ_FH_DESDE, :LIQ_FH_HASTA, :LIQ_VEH_ID, :LIQ_VEH_FH_ENTRADA, :LIQ_FH_LIQUIDACION ;
      LINEA =      'Concepto    : PARQUEO - ' || LIQ_TIPO ; SUSPEND ;
      LINEA = PADR( 'Placa/Código : ', ' ', 30 ) || PADL( LIQ_VEH_ID, ' ', 10 ) ; SUSPEND ;
      LINEA = PADR( 'Entrada      : ', ' ', 24 ) || STRL( LIQ_FH_DESDE, 16 ) ; SUSPEND ;
      LINEA = PADR( 'Salida      : ', ' ', 24 ) || STRL( LIQ_FH_HASTA, 16 ) ; SUSPEND ;
    END
    /* === FACTURA DE PAGO DE PERDIDO === */
    IF ( LIQ_TIPO = 'Perdido' ) THEN BEGIN
      LINEA = 'Concepto : TIQUETE EXTRAVIADO' ; SUSPEND ;
    END
    LINEA = '----------------------------------------' ; SUSPEND ;
  END
  /* === SI HUBO MENSUALIDAS AGREGA LOS DATOS === */
  PRO_CODIGO = NULL ;
  SELECT DISTINCT( FDT_PRO_CODIGO )
    FROM TB$FACTURA_DETALLE
    WHERE FDT_FAC_NUMERO = :FAC_NUMERO AND FDT_PRO_CODIGO = 'MENS'
    INTO :PRO_CODIGO ;
  IF ( PRO_CODIGO IS NOT NULL ) THEN BEGIN
    /* === BUSCA LA MENSUALIDAD CORRESPONDIENTE === */
    LINEA = 'Concepto : MENSUALIDAD' ; SUSPEND ;
    FOR SELECT MEN_NOMBRE, MEN_PLACA, MEN_DESDE, MEN_HASTA
          FROM TB$MENSUALES
          WHERE MEN_FAC_NUMERO = :FAC_NUMERO
          INTO :MEN_NOMBRE, :MEN_PLACA, :MEN_DESDE, :MEN_HASTA
    DO BEGIN
      LINEA = 'Nombre  : ' || STRL( MEN_NOMBRE, 29 ) ; SUSPEND ;
      LINEA = '  Placa  : ' || MEN_PLACA ; SUSPEND ;
      LINEA = '  Desde  : ' || STRL( MEN_DESDE, 16 ) ; SUSPEND ;
      LINEA = '  Hasta  : ' || STRL( MEN_HASTA, 16 ) ; SUSPEND ;
    END
    LINEA = '----------------------------------------' ; SUSPEND ;
  END
  /* === MISCELANEOS. === */
  LINEA = 'Cnt Descripción                Subtotal' ; SUSPEND ;
  LINEA = '--- -------------------- ---------------' ; SUSPEND ;
  FOR SELECT PADR( FDT_CANTIDAD, ' ', 3 ) || ' ' ||
            PADR( FDT_PRO_DESCRIPCION, ' ', 20 ) || ' ' ||
            PADL( CURR( FDT_TOTAL ), ' ', 15 )
        FROM TB$FACTURA_DETALLE
        WHERE FDT_FAC_NUMERO = :FAC_NUMERO
        INTO :LINEA
  DO BEGIN
    SUSPEND ;
  END
  LINEA = '                        ===============' ; SUSPEND ;
  LINEA = 'TOTAL A PAGAR  ===>' || PADL( CURR( FAC_TOTAL ), ' ', 20 ) ; SUSPEND ;
  LINEA = '' ; SUSPEND ;
  /* === DESCUENTOS. === */
  FOR SELECT 'Desc: ' || PADR( LDS_COM_NOMBRE, ' ', 20 ) || ' ' ||
            PADL( CURR( LDS_VALOR ), ' ', 13 )
      FROM TB$LIQ_DESCUENTOS
      WHERE ( LDS_LIQ_VEH_ID = :LIQ_VEH_ID )
        AND ( LDS_LIQ_VEH_FH_ENTRADA = :LIQ_VEH_FH_ENTRADA )
        AND ( LDS_LIQ_FH_LIQUIDACION = :LIQ_FH_LIQUIDACION )
      ORDER BY LDS_SECUENCIA
      INTO :LINEA
  DO BEGIN
    SUSPEND ;
  END
  /* === IMPUESTOS === */
  FOR SELECT 'Impu: ' || PADL( MIN( FIM_IMP_PORCENTAJE ), ' ', 5 ) || '%' || ' ' ||
            PADR( STRL( MIN( FIM_IMP_NOMBRE ), 15 ), ' ', 15 ) || ' ' ||
            PADL( CURR( SUM( FIM_VALOR ) ), ' ', 11 )
      FROM TB$FACTURA_IMPUESTOS
      WHERE FIM_FAC_NUMERO = :FAC_NUMERO
      GROUP BY FIM_IMP_CODIGO
      ORDER BY FIM_IMP_CODIGO
      INTO :LINEA
  DO BEGIN
    SUSPEND ;
  END
  /* === PIE DE PAGINA === */
  SELECT CFG_REC_SAL_PIE_PAGINA
    FROM TB$CONFIGURACION
    WHERE CFG_ESTACION = :ESTACION
    INTO :LINEA ;
  SUSPEND ;
END


celades1 24-05-2006 16:27:22

Hola

Yo nunca pongo comillas


Código SQL [-]
CREATE PROCEDURE SP$REP_FACTURA
(
  FAC_NUMERO INTEGER
)
RETURNS
(
  LINEA VARCHAR(240)
)
AS
BEGIN 
EXIT; 
END

para borrar

Código SQL [-]
DROP PROCEDURE SP$REP_FACTURA

para modificar

Código SQL [-]
ALTER PROCEDURE SP$REP_FACTURA 
(
  FAC_NUMERO INTEGER
)
RETURNS
(
  LINEA VARCHAR(240)
)
AS
BEGIN 
EXIT; 
END


Tengo 600 procedimientos en la BD y no he tenido ningun problema

Utiliza el IbExpert

Saludos

defcon1_es 24-05-2006 18:09:51

Hola. Creo que olvidaste el SET TERM...

Si utilizas FireBird 1.5 puedes usar CREATE OR ALTER PROCEDURE...

Cita:

Empezado por Ricardo León
Código:

SET TERM ^ ;
CREATE PROCEDURE "SP$REP_FACTURA"
(
  "FAC_NUMERO" INTEGER
)
RETURNS
(
  "LINEA" VARCHAR(240)
)
AS
BEGIN EXIT; END ^
SET TERM ; ^
 
SET TERM ^ ;
ALTER PROCEDURE "SP$REP_FACTURA"
(
  "FAC_NUMERO" INTEGER
)
RETURNS
(
  "LINEA" VARCHAR(240)
)
AS
DECLARE VARIABLE FAC_PREFIJO        VARCHAR(10) ;
  DECLARE VARIABLE FAC_FH_EMISION      TIMESTAMP ;
  DECLARE VARIABLE ESTACION            VARCHAR(16) ;
  DECLARE VARIABLE PRO_CODIGO          VARCHAR(4) ;
  DECLARE VARIABLE LIQ_VEH_ID          VARCHAR(10) ;
  DECLARE VARIABLE LIQ_VEH_FH_ENTRADA  TIMESTAMP ;
  DECLARE VARIABLE LIQ_FH_DESDE        TIMESTAMP ;
  DECLARE VARIABLE LIQ_FH_HASTA        TIMESTAMP ;
  DECLARE VARIABLE LIQ_FH_LIQUIDACION  TIMESTAMP ;
  DECLARE VARIABLE LIQ_TIPO            VARCHAR(15) ;
  DECLARE VARIABLE MEN_NOMBRE          VARCHAR(50) ;
  DECLARE VARIABLE MEN_PLACA          VARCHAR(13) ;
  DECLARE VARIABLE MEN_DESDE          TIMESTAMP ;
  DECLARE VARIABLE MEN_HASTA          TIMESTAMP ;
  DECLARE VARIABLE LDS_COM_CODIGO      VARCHAR(4) ;
  DECLARE VARIABLE LDS_VALOR          NUMERIC(9,2) ;
  DECLARE VARIABLE FAC_SUBTOTAL        NUMERIC(9,2) ;
  DECLARE VARIABLE FAC_TOTAL          NUMERIC(9,2) ;
  DECLARE VARIABLE FIM_IMP_NOMBRE      VARCHAR(20) ;
  DECLARE VARIABLE FIM_IMP_PORCENTAJE  NUMERIC(9,2) ;
  DECLARE VARIABLE FIM_VALOR          NUMERIC(9,2) ;
  DECLARE VARIABLE CONTADOR            INTEGER ;
BEGIN
  /* Busca la factura. */
  SELECT FAC_PREFIJO, FAC_FH_EMISION, FAC_SES_ESTACION, FAC_TOTAL
    FROM TB$FACTURAS
    WHERE FAC_NUMERO = :FAC_NUMERO
    INTO :FAC_PREFIJO, :FAC_FH_EMISION, :ESTACION, :FAC_TOTAL ;
  /* Toma el prefijo de factura. */
  IF ( FAC_PREFIJO IS NULL ) THEN
    FAC_PREFIJO = '' ;
  /* === ENCABEZADO === */
  SELECT CFG_REC_SAL_ENCABEZADO
    FROM TB$CONFIGURACION
    WHERE CFG_ESTACION = :ESTACION
    INTO :LINEA ; SUSPEND ;
  LINEA = '----------------------------------------' ; SUSPEND ;
  LINEA = PADR( 'Factura Nro.', ' ', 19 ) || PADL( FAC_PREFIJO || ' ' || PADL( FAC_NUMERO, '', 10 ), ' ', 21 ) ; SUSPEND ;
  LINEA = PADR( 'Fecha      ', ' ', 30 ) || CAST( FAC_FH_EMISION AS DATE ) ; SUSPEND ;
  LINEA = '----------------------------------------' ; SUSPEND ;
  /* === SI HUBO PARQUEO AGREGA LOS DATOS === */
  PRO_CODIGO = NULL ;
  SELECT DISTINCT( FDT_PRO_CODIGO )
    FROM TB$FACTURA_DETALLE
    WHERE FDT_FAC_NUMERO = :FAC_NUMERO AND FDT_PRO_CODIGO = 'PARQ'
    INTO :PRO_CODIGO ;
  IF ( PRO_CODIGO IS NOT NULL ) THEN BEGIN
    /* === BUSCA LA LIQUIDACION CORRESPONDIENTE === */
    SELECT LIQ_TIPO
      FROM TB$FACTURAS LEFT JOIN TB$LIQUIDACIONES ON LIQ_FAC_NUMERO = FAC_NUMERO
      WHERE FAC_NUMERO = :FAC_NUMERO
      INTO :LIQ_TIPO ;
    /* === FACTURA DE PAGO DE PARQUEO === */
    IF ( LIQ_TIPO IN ( 'Normal', 'Manual', 'Reliquidado', 'Gracia' ) ) THEN BEGIN
      SELECT LIQ_FH_DESDE, LIQ_FH_HASTA, LIQ_VEH_ID, LIQ_VEH_FH_ENTRADA, LIQ_FH_LIQUIDACION
        FROM TB$LIQUIDACIONES LEFT JOIN TB$VEHICULOS ON ( LIQ_VEH_ID = VEH_ID AND LIQ_VEH_FH_ENTRADA = VEH_FH_ENTRADA )
        WHERE LIQ_FAC_NUMERO = :FAC_NUMERO
        INTO :LIQ_FH_DESDE, :LIQ_FH_HASTA, :LIQ_VEH_ID, :LIQ_VEH_FH_ENTRADA, :LIQ_FH_LIQUIDACION ;
      LINEA =      'Concepto    : PARQUEO - ' || LIQ_TIPO ; SUSPEND ;
      LINEA = PADR( 'Placa/Código : ', ' ', 30 ) || PADL( LIQ_VEH_ID, ' ', 10 ) ; SUSPEND ;
      LINEA = PADR( 'Entrada      : ', ' ', 24 ) || STRL( LIQ_FH_DESDE, 16 ) ; SUSPEND ;
      LINEA = PADR( 'Salida      : ', ' ', 24 ) || STRL( LIQ_FH_HASTA, 16 ) ; SUSPEND ;
    END
    /* === FACTURA DE PAGO DE PERDIDO === */
    IF ( LIQ_TIPO = 'Perdido' ) THEN BEGIN
      LINEA = 'Concepto : TIQUETE EXTRAVIADO' ; SUSPEND ;
    END
    LINEA = '----------------------------------------' ; SUSPEND ;
  END
  /* === SI HUBO MENSUALIDAS AGREGA LOS DATOS === */
  PRO_CODIGO = NULL ;
  SELECT DISTINCT( FDT_PRO_CODIGO )
    FROM TB$FACTURA_DETALLE
    WHERE FDT_FAC_NUMERO = :FAC_NUMERO AND FDT_PRO_CODIGO = 'MENS'
    INTO :PRO_CODIGO ;
  IF ( PRO_CODIGO IS NOT NULL ) THEN BEGIN
    /* === BUSCA LA MENSUALIDAD CORRESPONDIENTE === */
    LINEA = 'Concepto : MENSUALIDAD' ; SUSPEND ;
    FOR SELECT MEN_NOMBRE, MEN_PLACA, MEN_DESDE, MEN_HASTA
          FROM TB$MENSUALES
          WHERE MEN_FAC_NUMERO = :FAC_NUMERO
          INTO :MEN_NOMBRE, :MEN_PLACA, :MEN_DESDE, :MEN_HASTA
    DO BEGIN
      LINEA = 'Nombre  : ' || STRL( MEN_NOMBRE, 29 ) ; SUSPEND ;
      LINEA = '  Placa  : ' || MEN_PLACA ; SUSPEND ;
      LINEA = '  Desde  : ' || STRL( MEN_DESDE, 16 ) ; SUSPEND ;
      LINEA = '  Hasta  : ' || STRL( MEN_HASTA, 16 ) ; SUSPEND ;
    END
    LINEA = '----------------------------------------' ; SUSPEND ;
  END
  /* === MISCELANEOS. === */
  LINEA = 'Cnt Descripción                Subtotal' ; SUSPEND ;
  LINEA = '--- -------------------- ---------------' ; SUSPEND ;
  FOR SELECT PADR( FDT_CANTIDAD, ' ', 3 ) || ' ' ||
            PADR( FDT_PRO_DESCRIPCION, ' ', 20 ) || ' ' ||
            PADL( CURR( FDT_TOTAL ), ' ', 15 )
        FROM TB$FACTURA_DETALLE
        WHERE FDT_FAC_NUMERO = :FAC_NUMERO
        INTO :LINEA
  DO BEGIN
    SUSPEND ;
  END
  LINEA = '                        ===============' ; SUSPEND ;
  LINEA = 'TOTAL A PAGAR  ===>' || PADL( CURR( FAC_TOTAL ), ' ', 20 ) ; SUSPEND ;
  LINEA = '' ; SUSPEND ;
  /* === DESCUENTOS. === */
  FOR SELECT 'Desc: ' || PADR( LDS_COM_NOMBRE, ' ', 20 ) || ' ' ||
            PADL( CURR( LDS_VALOR ), ' ', 13 )
      FROM TB$LIQ_DESCUENTOS
      WHERE ( LDS_LIQ_VEH_ID = :LIQ_VEH_ID )
        AND ( LDS_LIQ_VEH_FH_ENTRADA = :LIQ_VEH_FH_ENTRADA )
        AND ( LDS_LIQ_FH_LIQUIDACION = :LIQ_FH_LIQUIDACION )
      ORDER BY LDS_SECUENCIA
      INTO :LINEA
  DO BEGIN
    SUSPEND ;
  END
  /* === IMPUESTOS === */
  FOR SELECT 'Impu: ' || PADL( MIN( FIM_IMP_PORCENTAJE ), ' ', 5 ) || '%' || ' ' ||
            PADR( STRL( MIN( FIM_IMP_NOMBRE ), 15 ), ' ', 15 ) || ' ' ||
            PADL( CURR( SUM( FIM_VALOR ) ), ' ', 11 )
      FROM TB$FACTURA_IMPUESTOS
      WHERE FIM_FAC_NUMERO = :FAC_NUMERO
      GROUP BY FIM_IMP_CODIGO
      ORDER BY FIM_IMP_CODIGO
      INTO :LINEA
  DO BEGIN
    SUSPEND ;
  END
  /* === PIE DE PAGINA === */
  SELECT CFG_REC_SAL_PIE_PAGINA
    FROM TB$CONFIGURACION
    WHERE CFG_ESTACION = :ESTACION
    INTO :LINEA ;
  SUSPEND ;
END
SET TERM ; ^



Ricardo León 24-05-2006 19:48:53

Muchas gracias por sus respuestas. Ejecute lo que habia hecho desde el ibexpert y funciona ok.


La franja horaria es GMT +2. Ahora son las 05:28:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi