如何使用.NET调用Oracle指定包名的过程?
- 内容介绍
- 文章标签
- 相关推荐
本文共计847个文字,预计阅读时间需要4分钟。
相关专题
OracleCommand.CommandText 怎么写包过程的调用语法
直接写 call pkg_name.proc_name(?, ?, ?) 或 exec pkg_name.proc_name(?, ?, ?) 在 .net 的 oraclecommand 中会报错——oracle 数据库不支持这种 t-sql 风格的调用方式,尤其在使用 odp.net(如 oracle.manageddataaccess.client)时。
正确写法是用匿名 PL/SQL 块包裹,把包过程当作子程序调用:
BEGIN pkg_name.proc_name(:p1, :p2, :p3); END;
注意:BEGIN ... END; 是必须的;参数必须用命名绑定(:p1),不能用位置占位符(?),否则 ODP.NET 会抛出 ORA-01036: illegal variable name/number。
参数方向与 OracleType 设置容易错在哪
包过程若有 OUT 或 IN OUT 参数,仅靠 OracleParameter.Direction 不够,还必须显式指定 OracleDbType,否则可能触发类型推断失败或截断(比如 VARCHAR2 被当成 CHAR)。
本文共计847个文字,预计阅读时间需要4分钟。
相关专题
OracleCommand.CommandText 怎么写包过程的调用语法
直接写 call pkg_name.proc_name(?, ?, ?) 或 exec pkg_name.proc_name(?, ?, ?) 在 .net 的 oraclecommand 中会报错——oracle 数据库不支持这种 t-sql 风格的调用方式,尤其在使用 odp.net(如 oracle.manageddataaccess.client)时。
正确写法是用匿名 PL/SQL 块包裹,把包过程当作子程序调用:
BEGIN pkg_name.proc_name(:p1, :p2, :p3); END;
注意:BEGIN ... END; 是必须的;参数必须用命名绑定(:p1),不能用位置占位符(?),否则 ODP.NET 会抛出 ORA-01036: illegal variable name/number。
参数方向与 OracleType 设置容易错在哪
包过程若有 OUT 或 IN OUT 参数,仅靠 OracleParameter.Direction 不够,还必须显式指定 OracleDbType,否则可能触发类型推断失败或截断(比如 VARCHAR2 被当成 CHAR)。

