Stored procedures

Espero que me puedas ayudar con un problemita que tengo...
Tengo un problema al llamar un procedimiento almacenado en Sql desde Power Builder; requiero obtener un valor de salida desde el procedimiento almacenado, es un procedimiento para validar fechas, el parámetro de fecha se pasa como cadena para que se puedan comparar adecuadamente, pero al llamar el procedimiento me marca el sig. Error:
SQLState = 22005 Invalid character value for cast specification
Si lo pruebo sin valor de salida, el procedimiento se ejecuta adecuadamanente, así que el error es en la asignación de parámetros o algo así, ojalá que hayas visto un caso parecido y me puedas ayudar.
O si tienes algún ejemplo de cómo pasar parámetros output a un procedimiento almacenado en SQL y cómo retornarlos estaría muy bien...
* El código en el procedimiento almacenado es el sig:
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
* y el código en Power Builder es el sig:
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

1 respuesta

Respuesta
1
Creo que el problema esta en el formato del string de fecha que le pasas. No tengo a mano la ayuda de SQL Server, pero la función CAST debe asumir algún formato por defecto. Si este no coincide con yyyy-mm-dd ... es cuando da error. Prueba de lanzar un SELECT desde el interprete SQL que haga un Cast de un string, y descubre cual es el formato.
Por otra parte, la manera + simple de ejecutar SP desde PB es creándote un objeto Transaction y haciendo que el SQLCA herede de el. En el user object existe la opción de declarar SP como funciones externas. Se llaman como si fueran funciones locales de PB, pero realmente son llamadas RPC. Con la sintaxis que tu usas, puede haber problemas de paso de parámetros ...
Suerte

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas