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)
-   -   Problema con procedimiento almacenado (https://www.clubdelphi.com/foros/showthread.php?t=26522)

XBart 25-10-2005 20:10:43

Problema con procedimiento almacenado
 
Gracias por adelantado por su atencion, ahora, el problema es el siguiente:

uso firebird 1.5 y delphi sp2 con ibx

tengo un procedimiento almacenado(SP) el cual debe de verificar si una ciudad ya existe en la base de datos, en su respectiva tabla ciudad, y debe de regresar un resultado, el asunto es que no me regresa el resultado correcto, supongo que por mala escritura de la SP, a qui pongo el codigo de la sp, agradesco de antemano cualquier ayuda....

Código:

SET TERM ^ ;
 
 CREATE PROCEDURE SP_VERIFICA_CIUDAD (
        NOMBRE VARCHAR(40))
 RETURNS (
        RESULTADO INTEGER)
 AS
 DECLARE VARIABLE CODIGO INTEGER;
 DECLARE VARIABLE NOMBREVAR VARCHAR(10);
 begin
  SELECT CIUDADKEY, CIUDADNOMBRE FROM CCIUDAD
  WHERE CIUDADNOMBRE=:nombre
  into :codigo, :nombrevar;
  if (nombrevar='') then
          resultado=0;
  else
          resultado=1;
 
  suspend;
 end
 ^
 
 SET TERM ; ^


sanxpue 25-10-2005 20:24:55

Saludos
 
Tu procedimiento esta en lo correcto nada mas que no es lo mismo Nulo que vacio y tu estas tratando de comparar vacio con Nulo, cuando la ciudad no la encuentra el valor te regresa Nulo
Código:

SET TERM ^ ;
 
 CREATE PROCEDURE SP_VERIFICA_CIUDAD (
        NOMBRE VARCHAR(40))
 RETURNS (
        RESULTADO INTEGER)
 AS
 DECLARE VARIABLE CODIGO INTEGER;
 DECLARE VARIABLE NOMBREVAR VARCHAR(10);
 begin
  SELECT CIUDADKEY, CIUDADNOMBRE FROM CCIUDAD
  WHERE CIUDADNOMBRE=:nombre
  into :codigo, :nombrevar;
  if (nombrevar IS NULL) then
      resultado=0;
  else
      resultado=1;
 
  suspend;
 end
 ^
 
 SET TERM ; ^

Saludos

maeyanes 25-10-2005 20:27:26

Prueba así:

Código SQL [-]
create procedure SP_Verifica_Ciudad (
  Nombre varchar(40))
returns (
  Resultado integer)
as
  declare variable Codigo integer;
begin
  select CIUDADKEY from CCIUDAD
  where CIUDADNOMBRE = :Nombre
  into :Codigo;
  if (Codigo is Null) then
    Resultado = 0;
  else
    Resultado = 1;
  suspend;
end

Edit: Veo que en lo que tardé en formar mi mensaje te respondieron... Pero bueno, la versión que te pongo del procedimiento usa una variable menos, la cual tu declaras pero no haces uso de ella, a menos que hayas puesto una versión reducida de tu procedimiento.


Saludos...

Spynosa 27-10-2005 09:08:17

Prueba con esto:
Código SQL [-]
 SET TERM ^ ;
  
  CREATE PROCEDURE SP_VERIFICA_CIUDAD (
      NOMBRE VARCHAR(40))
  RETURNS (
      RESULTADO INTEGER)
  AS
 
  begin
 
    if (exists (SELECT CIUDADNOMBRE FROM CCIUDAD
    WHERE CIUDADNOMBRE=:nombre)) then
             resultado=1;
    else
       resultado=0;
 
    suspend;
  end
  ^
  
  SET TERM ; ^
a ver si te sirve


La franja horaria es GMT +2. Ahora son las 13:29:22.

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