最近老总让使用存储过程,说这个比较好用,抓起本oracle书看了看,写存储过程不是很难,但是写了存储过程调用的时候遇到许多问题,经过一天时间,把各种能遇到i的问题基本总结了下,跟大家分享。
照例画了张图,先了解下各种调用oracle存储过程的情形:
(这里自己创建了一个sqlhelper类,C#调用的时候用到了这个,这个类放到了末尾)
一、非查询存储过程
1、无参数
创建存储过程
CREATE OR REPLACE
PROCEDURE "USP_XCY" AS
BEGIN
UPDATE T_CITY set F_INFO='info' WHERE F_ID='140100';
END;
调用存储过程
string proName = "usp_xcy";
int result = SQLHelper.ExcuteProc(proName);
2、输入参数
创建存储过程
CREATE OR REPLACE
PROCEDURE "USP_SELECT" (parm_id VARCHAR2)
AS
BEGIN
UPDATE T_CITY set F_INFO='info' WHERE F_ID=parm_id;
END;
调用存储过程
string input = "140200";
string proName = "USP_SELECT";
OracleParameter[] param = new OracleParameter[1];
param[0] = new OracleParameter("parm_id", OracleDbType.Varchar2, input, ParameterDirection.Input);
int result = SQLHelper.ExcuteProc(proName, param);
3、输出参数
创建存储过程
CREATE OR REPLACE
PROCEDURE "USP_OUT" (parm_name IN VARCHAR2,parm_count OUT NUMBER )
AS
BEGIN
-- routine body goes here, e.g.
-- DBMS_OUTPUT.PUT_LINE('Navica t for Oracle');
SELECT COUNT(*) INTO parm_count FROM T_CITY WHERE T_CITY.F_NAME like '%'||parm_name||'%';
END ;
调用存储过程
string input = "市";
string output = "";
string proName = "USP_OUT";
OracleParameter[] param = new OracleParameter[2];
param[0] = new OracleParameter("parm_name", OracleDbType.Varchar2, input, ParameterDirection.Input);
param[1] = new OracleParameter("parm_count", OracleDbType.Int32, output, ParameterDirection.Output);
int result = SQLHelper.ExcuteProc(proName, param);
output = param[1].Value.ToString();