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