在C#中调用oracle中的function函数或者是Procedure过程的演示代码如下:

OracleConnection conn = new OracleConnection(strOracleConn());

conn.Open();

//获取SYSID

OracleCommand comGetSysid = new OracleCommand("get_sysid",conn); //给函数或者存储过程名

comGetSysid.CommandType = CommandType.StoredProcedure;

OracleParameter p1 = new OracleParameter("v_name", OracleType.VarChar, 45);//定义并创建一个ora参数,对应的参数名是 v_name

p1.Direction = System.Data.ParameterDirection.Input; //参数的方向,表明是一个输入的参数

p1.Value = "FW_EQPRES_WIPINVENTORY"; //给参数赋值

OracleParameter p2 = new OracleParameter("V_STR", OracleType.VarChar, 45); //定义并创建一个ora参数, 对应的参数名是 V_STR

p2.Direction = System.Data.ParameterDirection.ReturnValue; //参数方向,表明参数是返回值

comGetSysid.Parameters.Add(p1); //添加参数

comGetSysid.Parameters.Add(p2); //添加参数

comGetSysid.ExecuteNonQuery();

sysid = p2.Value.ToString(); //获取到SYSID

Oracle中 FUNCTION GET_SYSID 具体内容如下:

CREATE OR REPLACE FUNCTION "GET_SYSID"(v_name varchar2) return varchar2 is

V_STR   varchar2(255);

v_count number;

user_err exception; --用户定义异常

str_err varchar2(500); --用户定义异常

begin

select COUNT(*) INTO v_count from sys_objseq t where name =UPPER(V_name);

IF v_count <= 0 THEN

str_err := '对象不存在!!!';

raise user_err;

END IF;

V_STR := 'select CODE || LPAD(SEQ_' || v_name || '.NEXTVAL, 10, ''0'') from sys_objseq t where name = :name';

execute immediate V_STR

INTO V_STR

using UPPER(V_name);

Return(V_STR);

EXCEPTION

WHEN user_err THEN

raise_application_error(-20007, str_err);

RAISE;

end;

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐