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 13-12-2011
DasGrun DasGrun is offline
Miembro
 
Registrado: abr 2008
Posts: 109
Poder: 17
DasGrun Va por buen camino
Insertar en Un Stored Procedure

Hola, Tengo este SP, con la Finalidad que tiene que almacenar los datos Retornados a una tabla HIST_EVA_PROVEE por medio de un parámetro de Un Campo PROVEEDOR_ID.
este es el código:
Código SQL [-]
CREATE PROCEDURE SP_HIST_EVA_PROVEE(
  ID_PROVEEDOR SMALLINT DEFAULT NULL)
RETURNS(
  PROVEEDOR_ID SMALLINT,
  PROVEEDOR VARCHAR(255) CHARACTER SET ISO8859_1,
  RTN VARCHAR(10) CHARACTER SET ISO8859_1,
  CREADO_POR VARCHAR(255) CHARACTER SET ISO8859_1,
  FECHA_CLAS DATE,
  PRECIO NUMERIC(18, 2),
  CUMPLIMIENTO NUMERIC(18, 2),
  DISPONIBILIDAD NUMERIC(18, 2),
  TIEMPO_ENTREGA NUMERIC(18, 2))
AS
BEGIN
  /* Procedure body */
FOR
  SELECT
               PROVEEDORES.PROVEEDOR_ID,
               PROVEEDORES.PROVEEDOR,
               PROVEEDORES.RTN,
               MAESTRO_USUARIO.NOMBRE_COMPLETO,
               PROVEEDORES.FECHA_CLASIFI,
               PROVEEDORES.PREG_PRECIO_COMP,
               PROVEEDORES.PREG_CUMP_ESPECIF,
               PROVEEDORES.PREG_DISP_PRODUC,
               PROVEEDORES.PREG_TIEM_REPTA
     FROM
               PROVEEDORES
     INNER JOIN MAESTRO_USUARIO ON (PROVEEDORES.MAESTRO_USUARIO_ID = MAESTRO_USUARIO.MAESTRO_USUARIO_ID)
 WHERE
 PROVEEDORES.PROVEEDOR_ID = :ID_PROVEEDOR
INTO
  :PROVEEDOR_ID,
  :PROVEEDOR,
  :RTN,
  :CREADO_POR,
  :FECHA_CLAS,
  :PRECIO,
  :CUMPLIMIENTO,
  ISPONIBILIDAD,
  :TIEMPO_ENTREGA
DO
 BEGIN
     --Agregar nuevo Registro Historico
       INSERT INTO HIST_EVA_PROVEE(HIST_ID, PROVEEDOR_ID, PROVEEDOR, RTN, CREADO_POR, FECHA_CREACION, PRECIO, CUMPLIMIENTO, DISPONIBILIDAD, TIEMPO_ENTREGA)
      VALUES (0, :PROVEEDOR_ID, :PROVEEDOR, :RTN, :CREADO_POR, :FECHA_CLAS, :PRECIO, :CUMPLIMIENTO, ISPONIBILIDAD, :TIEMPO_ENTREGA);
  END
 END;

me Presenta este Mensaje de error:

Invalid Token
Invalid Request BLR at offset 68.
Procedure SP_HIST_EVA_PROVEE is no selectable(it does not contain a SUSPEND Statement)


esperando de Su Ayuda.

Gracias
__________________
Hasta Mis Huesos son Codificados?
Responder Con Cita
  #2  
Antiguo 13-12-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues, así por encima, diría que el mensaje informa de que no has puesto un "suspend", concretamente aquí, al final:
Código SQL [-]
  DO
  BEGIN     --Agregar nuevo Registro Historico     
    INSERT INTO HIST_EVA_PROVEE(HIST_ID, PROVEEDOR_ID, PROVEEDOR, RTN, 
                                                CREADO_POR, FECHA_CREACION, PRECIO, CUMPLIMIENTO, DISPONIBILIDAD, TIEMPO_ENTREGA)
    VALUES (0, :PROVEEDOR_ID, :PROVEEDOR, :RTN, :CREADO_POR, :FECHA_CLAS, :PRECIO, :CUMPLIMIENTO, ISPONIBILIDAD, :TIEMPO_ENTREGA);

    SUSPEND;    /*   <<--------------    */

  END
END
Responder Con Cita
  #3  
Antiguo 13-12-2011
DasGrun DasGrun is offline
Miembro
 
Registrado: abr 2008
Posts: 109
Poder: 17
DasGrun Va por buen camino
Gracias Casimiro, he modificado el Codigo,

ahora tengo este Mensaje de error:

Arthmetic overflow or division by zero or haz ocurred aritmetic exception, numeric owerflow or string trunation. At procedure SP_HIST_EVA_PROVEE line 16


este es el codigo de la creacion de la Tabla HIST_EVA_PROVEE:

Código SQL [-]
CREATE TABLE HIST_EVA_PROVEE (
  HIST_ID BIGINT NOT NULL,
  PROVEEDOR_ID SMALLINT,
  RTN VARCHAR(10) CHARACTER SET ISO8859_1 COLLATE ES_ES_CI_AI,
  PROVEEDOR DESCRIPTION,
  CREADO_POR DESCRIPTION,
  FECHA_CREACION FECHA,
  PRECIO CLASIFICACION,
  CUMPLIMIENTO CLASIFICACION,
  DISPONIBILIDAD CLASIFICACION,
  TIEMPO_ENTREGA CLASIFICACION,
  CALCULADO COMPUTED BY (((PRECIO + CUMPLIMIENTO + DISPONIBILIDAD + TIEMPO_ENTREGA) / 16) * 100),
  EVALUACION COMPUTED BY (iif((CALCULADO >= 0) and (CALCULADO <60), 'DEFICIENTE',
    (iif((CALCULADO >59) and (CALCULADO <80), 'BUENO', iif((CALCULADO >79) and (CALCULADO <90), 'MUY BUENO', iif((CALCULADO >89), 'EXCELENTE', '')))))));


ALTER TABLE HIST_EVA_PROVEE ADD PRIMARY KEY (HIST_ID);


SET TERM ^ ;

CREATE TRIGGER BI_HIST_EVA_PROVEE FOR HIST_EVA_PROVEE
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
  IF (NEW.HIST_ID IS NULL OR NEW.HIST_ID = 0) THEN
      NEW.HIST_ID = GEN_ID(HIST_EVA_PROVEE_HIST_ID_GEN, 1);
END^

SET TERM ; ^

Gracias Nuevamente
__________________
Hasta Mis Huesos son Codificados?

Última edición por Casimiro Notevi fecha: 13-12-2011 a las 17:34:44.
Responder Con Cita
  #4  
Antiguo 13-12-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pero eso es otro procedure.
Recuerda nuestra guía de estilo, preguntas distintas en hilos distintos.
Responder Con Cita
  #5  
Antiguo 13-12-2011
DasGrun DasGrun is offline
Miembro
 
Registrado: abr 2008
Posts: 109
Poder: 17
DasGrun Va por buen camino
No es otro Procedure es el Mismo. siempre Utilizando el SP del Inicio, luego que realize los cambios que me dijo, me produce este Mensaje de error,

Gracias
__________________
Hasta Mis Huesos son Codificados?
Responder Con Cita
  #6  
Antiguo 13-12-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ejecuta cada parte por separado, para ver dónde está el problema.
Primero el create table. Si no hay error, entonces el alter table. Y así, uno a uno.
Responder Con Cita
  #7  
Antiguo 13-12-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Como dice el mensaje de error. En algún momento ocurre un overflow numérico, una división por cero, una excepción numérica o un truncamiento de cadena.

Lo más habitual suele ser el último caso (truncamiento de cadena), aunque no puedes descartar los otros hasta revisar todas las operaciones aritméticas que se hacen y todos los tipos implicados.

Resumiendo, o bien en algún momento haces una división de algo dividido por cero (que matemáticamente es infinito y por tanto no es manejable en ninguna variable), o bien intentas asignar a una variable un tipo numérico con más precisión del que el tipo de la variable te permite, o bien intentas asignar a una variable una cadena más larga que el tipo en el que está definida la variable.

Tienes que revisar los tipos de los campos de la tabla PROVEEDORES para ver si caben en los tipos de las variables que has definido para ellos en el procedimiento almacenado.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #8  
Antiguo 13-12-2011
DasGrun DasGrun is offline
Miembro
 
Registrado: abr 2008
Posts: 109
Poder: 17
DasGrun Va por buen camino
Gracias Por Su Ayuda,

Tenias la razón Guillotmarc, es truncamiento de cadena en los campos de RTN, Origen de Varchar 20, y en la tabla destino había Varchar 10, esto me estaba complicando.

Gracias Nuevamente.
__________________
Hasta Mis Huesos son Codificados?
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Stored Procedure gluglu Conexión con bases de datos 16 24-02-2011 17:41:24
Stored Procedure !!! Ledian_Fdez C++ Builder 0 02-03-2010 14:01:29
Stored Procedure StartKill MySQL 2 27-08-2008 06:18:44
Ver los Stored Procedure tgsistemas SQL 0 06-04-2004 17:18:22
Stored Procedure tgsistemas SQL 1 27-02-2004 13:10:33


La franja horaria es GMT +2. Ahora son las 22:35:59.


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