Ejecutar Procedimiento Almacenado en PowerBuilder


En el ejemplo mostrare como ejecutar un Procedimiento Almacenado de SQL Server desde PowerBuilder.

Mostraremos tres escenarios distintos:

1. Cuando el Procedimientos Almacenado devuelve uno o más parámetros de salida también llamado parámetro OUTPUT.

2. Cuando  devuelve un conjunto de resultados producto de una sentencia select.

3. El tercero y más simple, cuando el Procedimiento Almacenado no tiene parámetro alguno.

Escenario 1: Cuando el Procedimiento Almacenado devuelve valor mediante variables OUTPUT.

Primero definimos el código del Procedimiento Almacenado, el cual su función es devolver el producto de la multiplicación del valor de parámetro1 y el valor de PI que es 3.1416.

Ojo, devemos definir el parametro de retorno como OUTPUT


CREATE PROCEDURE usp_escenario1 @parametro1 INTEGER,@parametro2 DECIMAL(18,2) OUTPUT
AS
BEGIN
      SET @parametro2=@parametro1 * 3.1416
END

En la cuadro siguiente el código de PowerBuilder usado.



Integer Valor
Decimal Resultado

Valor=10

//Considerar que las variables que se pasen deben ser del mismo tipo
//definido en el procedimiento almacenado

DECLARE  sp_procedure PROCEDURE FOR usp_escenario1
@parametro1 = :Valor,
@parametro2 = :Resultado OUTPUT; //Ojo definir el parametro2 como OUTPUT.


EXECUTE sp_procedure; //Ejecutamos con el nombre del Alias

FETCH sp_procedure INTO :Resultado; //Recuperamos el resultado

CLOSE sp_procedure;

messagebox("",Resultado)



Escenario 2 y Escenario 3: Cuando devuelve un conjunto de resultados producto de una sentencia select y cuando el procedimiento no tiene parámetros, como diría mi abuela aquí matamos dos pájaros de un tiro, abordando los dos últimos escenarios restantes.

Para una mejor manipulación de los resultados devueltos por un Procedimiento Almacenado es aconsejable realizarlo mediante un DataWindow, pero eso será tema de otro artículo.

Definimos el código del Procedimiento Almacenado, el cual no pasamos ningún parámetro simplemente ejecutamos el procedimiento y recuperamos el conjunto de resultados.




CREATE PROCEDURE usp_escenario2_3
AS
BEGIN
      CREATE TABLE #cliente
      (
        codigo int,
        nombre varchar(15)
      ) 
     
      INSERT INTO #cliente VALUES(1,'PEPE')
      INSERT INTO #cliente VALUES(2,'JUAN')
      INSERT INTO #cliente VALUES(3,'MARIA')
     
      SELECT codigo,nombre FROM #cliente
END


En la cuadro siguiente el código de PowerBuilder usado.



Integer codigo
String  nombre

//Considerar que las variables que se pasen deben ser del mismo tipo definido en
//el procedimiento almacenado

DECLARE sp_procedure PROCEDURE FOR usp_escenario2_3;

EXECUTE sp_procedure; //Ejecutamos con el nombre del Alias

FETCH sp_procedure INTO :codigo,:nombre; //Recuperamos el resultado

DO WHILE sqlca.sqlcode = 0
      Messagebox("Resultado",string(codigo)+" " +nombre)
      FETCH sp_procedure INTO :codigo,:nombre;
LOOP
CLOSE  sp_procedure;


Articulos de apoyo:
Conexión a SQL Server
Conexion a SQL Server mediante OLE DB




3 comentarios:

Marco Antonio Alzola dijo...

todo ok, pero si quisiera conectar ese resultado con un datawondows, que podria agregar..gracias

Unknown dijo...

al pasarlo a power builder marca error de valor de caracter no valido para especificacion cast que podra ser.

Anónimo dijo...
Este comentario ha sido eliminado por el autor.

Publicar un comentario