由于一直使用Sqlserver所以 首次使用Oracel 就碰到问题
比方Sqlserver要查询 要返回所有结果集 就用SELECT *
而Oracel 从网上好像要用游标或包,我一直不杂喜欢游标,所以用包,
现在我也不清楚包是个什么东西,我是Oracel盲 暂时为了进度
从网上找到一个例子,原文如下 这是最简单的例子,oracle存储过程返回数据集要比sqlserver麻烦的多,用惯sql的人可能会非常不习惯,下面做了个最简单的例子。
首先建个包:
create or replace package temppkg
is
type mytable is ref cursor;
procedure Get_Template(cur_mytable out mytable);
end; create or replace package body temppkg
is
procedure Get_Template(cur_mytable out mytable)
is
begin
open cur_mytable for select * from tj_template_data;
end Get_Template;
end temppkg; c#里: OracleConnection con = new OracleConnection(strConnection);
OracleCommand comm = new OracleCommand("temppkg.Get_Template", con);
comm.Parameters.Add("cur_mytable", OracleType.Cursor);
comm.Parameters[0].Direction = ParameterDirection.Output;
comm.CommandType = CommandType.StoredProcedure;
DataSet ds = new DataSet();
OracleDataAdapter ada = new OracleDataAdapter();
ada.SelectCommand = comm;
ada.Fill(ds, "mytable");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = ds.Tables[0].TableName;
测试已经通过
但是问题来了
我想在包中再加一条存储过程 加进去 编译通过了但是包错了create or replace package temppkg
is
type mytable is ref cursor;
procedure Get_Template(cur_mytable out mytable);
procedure Get_TemplateA(cur_mytable out mytable);
end;
过程的创建拷贝Get_TemplateA的create or replace package body temppkg
is
procedure Get_Template(cur_mytable out mytable)
is
begin
open cur_mytable for select * from tj_template_data;
end Get_Template;
end temppkg;create or replace package body temppkg
is
procedure Get_TemplateA(cur_mytable out mytable)
is
begin
open cur_mytable for select * from tj_template_data;
end Get_TemplateA;
end temppkg;再次调用 报错 但编译通过了
谢谢 求解答
分不多了 不好意思
比方Sqlserver要查询 要返回所有结果集 就用SELECT *
而Oracel 从网上好像要用游标或包,我一直不杂喜欢游标,所以用包,
现在我也不清楚包是个什么东西,我是Oracel盲 暂时为了进度
从网上找到一个例子,原文如下 这是最简单的例子,oracle存储过程返回数据集要比sqlserver麻烦的多,用惯sql的人可能会非常不习惯,下面做了个最简单的例子。
首先建个包:
create or replace package temppkg
is
type mytable is ref cursor;
procedure Get_Template(cur_mytable out mytable);
end; create or replace package body temppkg
is
procedure Get_Template(cur_mytable out mytable)
is
begin
open cur_mytable for select * from tj_template_data;
end Get_Template;
end temppkg; c#里: OracleConnection con = new OracleConnection(strConnection);
OracleCommand comm = new OracleCommand("temppkg.Get_Template", con);
comm.Parameters.Add("cur_mytable", OracleType.Cursor);
comm.Parameters[0].Direction = ParameterDirection.Output;
comm.CommandType = CommandType.StoredProcedure;
DataSet ds = new DataSet();
OracleDataAdapter ada = new OracleDataAdapter();
ada.SelectCommand = comm;
ada.Fill(ds, "mytable");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = ds.Tables[0].TableName;
测试已经通过
但是问题来了
我想在包中再加一条存储过程 加进去 编译通过了但是包错了create or replace package temppkg
is
type mytable is ref cursor;
procedure Get_Template(cur_mytable out mytable);
procedure Get_TemplateA(cur_mytable out mytable);
end;
过程的创建拷贝Get_TemplateA的create or replace package body temppkg
is
procedure Get_Template(cur_mytable out mytable)
is
begin
open cur_mytable for select * from tj_template_data;
end Get_Template;
end temppkg;create or replace package body temppkg
is
procedure Get_TemplateA(cur_mytable out mytable)
is
begin
open cur_mytable for select * from tj_template_data;
end Get_TemplateA;
end temppkg;再次调用 报错 但编译通过了
谢谢 求解答
分不多了 不好意思
我简单理解成 SQLSERVER 的架构下的 一个方法 我知道是个错误理解麻烦 帮我看看问题吧SQLSERVER 没有这个ORACLE包的概念 有另一个ETL包
2 o_cur OUT SYS_REFCURSOR) AS
3 BEGIN
4 OPEN o_cur FOR
5 SELECT empno, ename FROM emp WHERE empno = i_empno;
6 END;
7 /Procedure created.SQL> var v_a refcursorSQL> exec proc_get_ename(7369,:v_a);PL/SQL procedure successfully completed.SQL> print v_a EMPNO ENAME
---------- ----------
7369 SMITHSQL>