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)
-   -   Stored Procedure genera codigo (https://www.clubdelphi.com/foros/showthread.php?t=26324)

Carlos Hurtado 19-10-2005 16:46:34

Stored Procedure genera codigo
 
Hola Amigos, estoy desarrollando una Stored Procedure que genera un codigo basado en tres elementos:
año + mes + numero de un generador.

como variables de estrada tiene:
V_ANO VARCHAR(4)
V_MES VARCHAR(2)

Estas corresponde al proceso con Delphi de la Instruccion 'Now' por lo que contiene el año y mes actual.

Una tabla 'Utilitarios' tiene los campos ano, mes que guardan el año y el mes sin actualizar.

El Stored Procedure verifica si la fecha de la tabla Utilitarios es diferente a la actual. Y si lo es, la actualiza y coloca el generador a 100000 que el numero inicial.

Pues bien al compilar de un script con IbEasy me manda un mensaje de error : "SET" COMPOSICION DE LINEA DESCONOCIDA.

Aqui va la stored procedure.


SET TERM ^;
CREATE PROCEDURE CREACOD_VALE(
V_ANO Varchar(4),
V_MES Varchar(2))
RETURNS (
CODIGO VARCHAR(12))
AS
DECLARE VARIABLE COD_VALE NUMERIC ;
DECLARE VARIABLE P_ANO VARCHAR(4);
DECLARE VARIABLE P_MES VARCHAR(2);
BEGIN
SELECT ANO, MES FROM UTILITARIOS INTO :P_ANO, :P_MES;
IF (:P_MES <> :V_MES) THEN
BEGIN
INSERT INTO UTILITARIOS
(
ANO, MES
)
VALUES
(
:V_aNO, :V_MES
);
SET GENERATOR VALE_GENER TO 100000
END
COD_VALE := GEN_ID(VALE_GENER,1)
CODIGO = :V_ANO||:V_MES||CAST(COD_VALE AS CHAR(6))
END ^
SET TERM; ^



Favor ayudarme a resolver este problema.
Gracias.

defcon1_es 19-10-2005 18:01:00

Hola.
Me parece que el fallo te lo da en la linea:
Código SQL [-]
  SET GENERATOR VALE_GENER TO 100000;
Es una instrucción DDL (Data Definition Language), y en triggers y proc. almacenados no se pueden usar instrucciones DDL, sólo DML (Data Manipulation Language)

Código SQL [-]
SET TERM ^;
CREATE PROCEDURE CREACOD_VALE(V_ANO Varchar(4), V_MES Varchar(2))
RETURNS (CODIGO VARCHAR(12))
AS
DECLARE VARIABLE COD_VALE NUMERIC ;
DECLARE VARIABLE P_ANO VARCHAR(4);
DECLARE VARIABLE P_MES VARCHAR(2);
BEGIN
  SELECT ANO, MES 
  FROM UTILITARIOS 
  INTO :P_ANO, :P_MES;
 
  IF (:P_MES <> :V_MES) THEN
  BEGIN
    INSERT INTO UTILITARIOS(ANO, MES) VALUES(:V_aNO, :V_MES);
    SET GENERATOR VALE_GENER TO 100000; //Esto no lo puedes hacer dentro de un Stored Procedure ...
  END
 
  COD_VALE := GEN_ID(VALE_GENER,1);
  CODIGO = :V_ANO||:V_MES||CAST(COD_VALE AS CHAR(6));
END ^
SET TERM; ^

Spynosa 19-10-2005 19:38:19

si estas usando firebird 1.5 puedes usar lo siguiente

Código SQL [-]
 execute statement('    SET GENERATOR VALE_GENER TO 100000');

en versiones anteriores no existe execute statement


La franja horaria es GMT +2. Ahora son las 15:15:36.

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