PDA

Ver la Versión Completa : problema con stored procedure


Markoz
25-06-2003, 21:24:35
Tengo una tabla de la cual hice un respaldo, segui trabajando con la original, pero ahora marca un erro en el procedimiento

CREATE PROCEDURE VENTA
AS
begin
INSERT INTO HISTVENTAS SELECT * FROM TMPVENTAS;
end

el cual pasa todos los datos de una tabla a otra, pero si corro exactamente el mismo procedimiento en la tabla de respaldo (que esta escrito exactamente), si funciona, alguien tiene idea por que?

gracias a todos

kinobi
25-06-2003, 22:14:05
Hola,

Posteado originalmente por Markoz
Tengo una tabla de la cual hice un respaldo, segui trabajando con la original, pero ahora marca un erro en el procedimiento [...]

si no nos cuentas los síntomas (tipo de error, mensajes que envía el servidor, en qué momento: ¿al compilarlo, al ejecutarlo?, ...) es difícil dar un pronóstico.

Saludos

Markoz
25-06-2003, 23:29:00
Si, lo olvide, iba de salida a comer y me apuraban, perdon.

frmCompile.q_COMPILE:
An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Count of columns does not equal count of values.

ese es el error al compilar el procedimiento, pero antes de verificarlo, me marco error cuando corria el sistema en delphi, de donde llamo al procedimiento almacenado, para modificarlo utilizo QuickDesk 2.9

kinobi
26-06-2003, 00:16:51
Hola,

Posteado originalmente por Markoz
Count of columns does not equal count of values.

lo único que se me ocurre es lo que dice el mensaje de error, que el número y tipo de los campos de ambas tablas, HISTVENTAS y TMPVENTAS, no coincida.

Sería conveniente una validación de la base de datos, para descartar que haya algún problema de corrupción.

Saludos.

emili
26-06-2003, 19:41:00
Coincido con Kinobi. Debe ser problema de los campos de las tablas. Deben ser identicas. Tipos, tamaños, etc.

Si esta todo en orden prueba con seleccionar los campos (fisicamente) y introducirlos tambien en el insert. Me paso algo parecido hace tiempo y con esto se soluciono.

INSERT INTO HISTVENTAS(NUM_PEDIDO, CLIENTE, FORMA_PAGO ...) SELECT NUM_PEDIDO, CLIENTE, FORMA_PAGO, ... FROM TMPVENTAS WHERE ...


Saludos

Markoz
26-06-2003, 23:54:00
Al llamar dicho prodecedimiento almacenado desde Delphi

CREATE PROCEDURE ALCARRITO
AS
begin
INSERT INTO HISTVENTAS SELECT * FROM TMPVENTAS;
end

me envia el siguiente error

Project SDerre.exe raised exception class EIBInterbaseError with message
'Dynamic SQL Error
SQL Error code = -84
Procedure ALCARRITO does not return any values'


Muchas gracias, me han ayudado mucho a entrarle a Interbase

emili
27-06-2003, 10:39:18
Te faltan los parentesi:


CREATE PROCEDURE VENTA ()
AS
begin
INSERT INTO HISTVENTAS SELECT * FROM TMPVENTAS;
end;


Tambien le puedes pasar parametros al procedure. Te pongo un ejemplo:

ALTER PROCEDURE BAJARIESGOS (RIESGO INTEGER, EJE SMALLINT)
AS
begin
UPDATE HRIESGOS SET
F_BAJA='TODAY',
ACTIVO='N'
WHERE NUM_RIES=:RIESGO AND EJE=:EJE;
end;


Saludos!!;)

emili
27-06-2003, 10:41:15
Perdon. Se me ha pasado poner

CREATE PROCEDURE .... en vez de
ALTER PROCEDURE....

Esto lo podrás usar para modificar el Store procedure sin tener que borrarlo y volverlo a crear.


:D

aom
27-06-2003, 13:46:31
Hola Markoz,
no lo he probado pero el error

Procedure ALCARRITO does not return any values

es posible que te aparezca por el método que utilizas para ejecutar la sentencia en Delphi.
Debe ejecutar ExecSQL cuando la sentencia no te devuelva valores (insert, delete, etc...) y Open cuando la sí los devuelva (select)

Saludos