Oracle和Sqlserver不一样的地方有很多。
个人最深的体会是存储过程返回结果集,在Sqlserver中直接select查询就行,Oracle就不行了。
这里,就用最简单的例子说明存储过程返回结果集的例子
CREATE OR REPLACE PROCEDURE 存储过程名( 字段名 in VARCHAR2, l_result OUT TYPES.RQ_REF_CURSOR -- 包里面方法名 ) is str_sql varchar2(8000) := ''; begin str_sql:='select * from tabelname where ID='||字段名;
open l_result for str_sql;
END Region_Linkage;
创建包(非必须)
CREATE OR REPLACE PACKAGE TYPES AS TYPE RQ_REF_CURSOR IS REF CURSOR; END;
创建包并非是必须的,将 REF CURSOR 直接加在存储过程的OUT关键字后面也可以
另外补充上C#中调用存储过程的通用方法
public DataTable InsertT_BUILDITEM(string REGION_ID) { DataSet ds = new DataSet(); try { string sql = "存储过程名"; OracleConnection con = this._sqlCon; OracleCommand cmd = new OracleCommand(sql, con); cmd.CommandType = CommandType.StoredProcedure; //申明是存储过程 cmd.Parameters.Add("传入参数名", OracleType.NVarChar).Value = REGION_ID; cmd.Parameters.Add("返回的游标名", OracleType.Cursor).Direction = ParameterDirection.Output; OracleDataAdapter ad = new OracleDataAdapter(cmd); ad.Fill(ds, "report_build"); } catch (Exception e) { throw e; } return ds.Tables[0]; }
相关文档
Oracle视频教程:http://oracle.so138.com/video
Oracle初级教程:http://www.cnblogs.com/linjiqin/category/349944.html