谢谢回复,在c#里面,需要定义OracleParameter in_Parameter1 = new OracleParameter();in_Parameter1.OracleType=?直接用构造函数传递true、false等进去都不对。如:bool a=true; OracleParameter in_Parameter1= new OracleParameter("in_Parameter1",a);都是报参数类型错误
另外PL/SQL中似乎不支持这种将函数做为参数传入另一函数或者存储过程的方式,在不修改现有Procedure的情况下,写一个封装procedure会更好。类似这样: create or replace your_new_procedure(parm1_int, parm2, parm3) is parm1 boolean; begin if parm1_int = 1 then parm1 := true; else parm1 := false; end if; your_procedure(parm1, parm2, parm3); end;
OracleParameter in_Parameter1= new OracleParameter("in_Parameter1",a);都是报参数类型错误
定义成int类型,然后通过sys.diutil.int_to_bool函数将传入的int型转成boolean型。
call your_procedure(sys.diutil.int_to_bool(parm1), parm2, parm3);
create or replace your_new_procedure(parm1_int, parm2, parm3) is
parm1 boolean;
begin
if parm1_int = 1 then parm1 := true;
else
parm1 := false;
end if;
your_procedure(parm1, parm2, parm3);
end;
可以写一个新的procedure封装旧的procedure,这样不会破坏其他程序。
我在#4提出的修改是针对你的c#代码,并不是pl/sql.
只能改过程
大概是Oracle自身责任更大一点吧。