Stored Procedures in SQL

Soy Claudia, nuevamente, fíjate que más bien no te expliqué muy bien lo que ocurría con el procedimiento almacenado que tengo en SQL y su llamada desde Power Builder...
El problema no es la comparación de la cadena para poder hacer la función datediff, el problema es en como retornar el valor de salida del procedimiento almacenado, en este caso sería @resultado, requiero que con este parámetro me refleje si las fechas son o no iguales...
Te mando nuevamente el código, o si tu tienes algún ejemplo de cómo llamar un procedimiento con valores output y como retornarlo estaría excelente.
Gracias nuevamente. ISC. Claudia Judith López Rivera.
*** Código en SQL
CREATE PROCEDURE us_validar_fechas @fecha char(10), @resultado smallint output AS
declare @año integer,@mes integer,@dia integer
set @año = datediff(year,cast(rtrim(@fecha) as datetime),getdate())
set @mes = datediff(month,cast(rtrim(@fecha) as datetime),getdate())
set @dia = datediff(day,cast(rtrim(@fecha) as datetime),getdate())
if @año = 0 and @mes = 0 and @dia = 0
begin
set @resultado = 1
end
else
begin
set @resultado = 2
end
GO
*** Código en Power Builder
string fecha
integer resultado
fecha = string(today(),"yyyy-mm-dd")
resultado = 0
CONNECT USING SQLCA;
IF SQLCA.SQLCode = -1 THEN
MessageBox("SQL error1", SQLCA.SQLErrText)
END IF
declare proc_valid procedure for us_validar_fechas @fecha = :fecha, @resultado = :resultado output;
execute proc_valid;
IF SQLCA.SQLCode = -1 THEN
MessageBox("SQL error2", SQLCA.SQLErrText)
END IF
if resultado = 1 then
MessageBox("Resultado","son iguales")
end if
if resultado = 2 then
MessageBox("Resultado","no son iguales")
end if

1 Respuesta

Respuesta
1
Te falta hacer el fetch de la variable que retorna el SP, tu código en Power debe quedar así:
// Código en Power Builder
string fecha
integer resultado
fecha = string(today(),"yyyy-mm-dd")
resultado = 0
CONNECT USING SQLCA;
IF SQLCA.SQLCode = -1 THEN
MessageBox("SQL error1", SQLCA.SQLErrText)
END IF
declare proc_valid procedure for us_validar_fechas @fecha = :fecha, @resultado = :resultado output;
execute proc_valid;
IF SQLCA.SQLCode = -1 THEN
MessageBox("SQL error2", SQLCA.SQLErrText)
return
END IF
IF SQLCA.SQLCode = 0 THEN
FETCH proc_valid into: resultado ;
close proc_valid ;
end if
if resultado = 1 then
MessageBox("Resultado","son iguales")
elseif resultado = 2 then
MessageBox("Resultado","no son iguales")
end if
Hola Alex!
Fíjate que justo en lo que contestabas probé eso del fetch, pero me sigue marcande el mismo error, es decir el SQLCode siempre es -1
¿Tu sabes cómo puedo hacer para obtener la fecha y hora del servidor SQL?
Gracias.
Claudia.-
Cambia tu sp y enviale la fecha en formato datetime
fíjate en el error que te retorna SQL que viene en la variable SQLCA. SQLErrText, este mensaje te ayuda a saber el motivo por el cual da error...
Prueba esto:
CREATE PROCEDURE us_validar_fechas @fecha datetime, @resultado smallint output AS
declare @año integer,@mes integer,@dia integer
set @año = datediff(year,@fecha),getdate())
set @mes = datediff(month,@fecha),getdate())
set @dia = datediff(day,@fecha),getdate())
if @año = 0 and @mes = 0 and @dia = 0
begin
set @resultado = 1
end
else
begin
set @resultado = 2
end
GO
2.-Para traer la fecha del servidor has un SP
CREATE PROCEDURE sp_get_fecha_servidor @fecha datetime output AS
select @fecha = getdate()
Go
Luego en PB llamas a este SP usando el fetch para tomar la fecha ...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas