create table PRUEBAS
(
IDPRUEBA NUMBER,
NOMBRE VARCHAR2(20),
DESCRIP VARCHAR2(200)
)
tablespace SYSTEM
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
El siguiente script es el del package:
create or replace package Pruebas_pkg is
-- Public type declarations
type t_cursor is REF CURSOR;
procedure ListarDatoPruebas(o_cursor in out t_cursor);
end Pruebas_pkg;
create or replace package body Pruebas_pkg is
procedure ListarDatoPruebas(o_cursor in out t_cursor)
is
begin
OPEN o_cursor FOR
Select IDPrueba, Nombre, descrip From PRUEBAS Order by Nombre;
end ListarDatoPruebas;
end Pruebas_pkg;
Para ésto creamos una nueva página aspx e insertamos un control DataGrid, añadimos en referencias el proveedor de datos de oracle System.Data.OracleClient, después en la página aspx también añadimos la siguiente referencia:
using Oracle.DataAccess.Client;
Y ponemos el siguiente código dentro del evento Page_Load:Ponemos la cadena de connexion al oracle.
string strConnectionString ="User Id=SYSTEM;Password=pass;Data Source=PRUEBAS";
Cramos una connexion a oracle con la cadena de conexión definida anteriormenteOracleConnection oraconn = new OracleConnection(strConnectionString);
Abrimos la conexiónoraconn.Open();
Creamos un objeto command para ejecutar el procedure del package.OracleCommand oracmd = new OracleCommand();
Añadimos un parámetro de salida, la propiedad, ParameterDirection.Output, nos va a definir que el parámetro es de salidaoracmd.Parameters.Add("o_cursor", OracleDbType.RefCursor, ParameterDirection.Output);
Asignamos el package y procedure a ejecutar. Si dentro de este package hubieran más procedures seleccionaríamos el que queremos ejecutar cambiando el nombre detrás del punto, Pruebas_pkg.Nombre_del_procedure.oracmd.CommandText = "Pruebas_pkg.ListarDatoPruebas";
Definimos que el tipo de comando a ejecutar es un stored procedure.oracmd.CommandType = CommandType.StoredProcedure;
Y asignamos la conexión que previamente hemos definido y abierto.oracmd.Connection = oraconn;
Por último, creamos un DataAdapter que asignaremos a un DataSet y éste al DataGrid para que se muestren los datos por pantalla.
OracleDataAdapter da = new OracleDataAdapter(oracmd);
DataSet ds = new DataSet();
da.Fill(ds);
DataGrid1.DataSource = ds;
DataGrid1.DataBind();
oraconn.Close();
Como véeis la forma es similar que si ejecutamos un procedimiento almacenado de SQL Server.Saludos
Alex