Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-10-2005
Carlos Hurtado Carlos Hurtado is offline
Miembro
 
Registrado: dic 2004
Posts: 30
Poder: 0
Carlos Hurtado Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 19-10-2005
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
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; ^
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
  #3  
Antiguo 19-10-2005
Avatar de Spynosa
Spynosa Spynosa is offline
Miembro
 
Registrado: nov 2004
Ubicación: Ecija - Sevilla
Posts: 99
Poder: 20
Spynosa Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


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


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
Copyright 1996-2007 Club Delphi