- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 Oracle 11g 上有一个 pl/sql 过程,它具有以下参数:
PROCEDURE validate_product
( product_id_in IN varchar2 ,
username_in in varchar2,
source_in varchar2,
source_id_in varchar2 ,
isEuProduct in boolean ,
error_code out varchar2,
product_type out varchar2
)
我正在尝试使用以下代码从 java 中调用上述存储过程:
cstmt = getConnection().prepareCall("begin " + DBUtil.SCHEMANAME + ".PRODUCT_UTILITIES.validate_product(:1,:2,:3,:4,:5,:6,:7); end;");
cstmt.registerOutParameter(6, Types.CHAR);
cstmt.registerOutParameter(7, Types.CHAR);
cstmt.setString(1, productId);
cstmt.setString(2, username);
cstmt.setString(3, sourceName);
cstmt.setString(4, sourceId);
cstmt.setBoolean(5, isEUProduct);
cstmt.execute();
除了 isEUProduct
是 boolean
之外,java 变量的类型都是 String
。每当我运行上面的程序时,我都会收到以下错误:
PLS-00306: wrong number or types of arguments in call to validate_product ORA-06550: line 1, column 7: PL/SQL: Statement ignored"
我一定已经调试了该程序一百次,但一切似乎都是正确的类型并且参数的数量也是正确的。
我完全不知道我做错了什么。在谷歌上搜索后,我怀疑我可能没有正确设置 boolean 参数。
有什么想法吗?
最佳答案
当我们遇到这个问题时我很惊讶,但是 Oracle JDBC 驱动程序不支持将 boolean 值传递到存储过程中......是的,我没有编造它:)
Boolean Parameters in PL/SQL Stored Procedures
The JDBC drivers do not support the passing of BOOLEAN parameters to PL/SQL stored procedures. If a PL/SQL procedure contains BOOLEAN values, you can work around the restriction by wrapping the PL/SQL procedure with a second PL/SQL procedure that accepts the argument as an INT and passes it to the first stored procedure. When the second procedure is called, the server performs the conversion from INT to BOOLEAN.
关于java - 使用带有 boolean IN 参数的 CallableStatement 在 Java 中调用 Oracle PL/SQL 过程会产生 PLS-00306 oracle 错误 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14554251/
CallableStatement stmt = getSession().connection().prepareCall( "{call CRM_DAO.Sear
public void XXX(){ Connection conn = ~~; CallableStatement cstmt = conn.prepareCall("
我在 Oracle 11g 中有一个存储过程,我使用 Oracle 瘦数据库驱动程序和 CallableStatement 从 Java 程序调用它。此存储过程在同一连接上的循环中被调用数千次。 对于
当调用没有参数且没有输出的存储过程时,使用 CallableStatement 有什么优势吗?超过常规Statement或PreparedStatement ? 最佳答案 CallableStatem
我是java新手。我尝试在 SQL SERVER 中创建一个存储过程(SP)。SP 是: go create procedure sp_calculate @value1 int = 0,
我有一个存储过程,需要大约 3 小时才能执行。我不想等到 procedure 返回值或等到 CallableStatement execute() 方法被执行。 JDBC中有这种可能性吗?或者我应该使
我有一个如下形式的 SQL 语句: BEGIN\n UPDATE tab SET stuff WHERE stuff RETURNING intA, intB, stringC INTO ?,?,?
我在 MySql 中有一个存储过程的示例,我想用 JDBC 调用它。问题是我收到以下错误: java.sql.SQLException: Parameter number 1 is not an OU
我有一个关于性能的问题。 我开发的应用程序是 Spring MVC 应用程序 (v3.2.9)。它托管在 WebSphere Application Server (v8.5.5) 上。它连接到 AS
我试图通过参数名称调用存储过程: int processId = 1; CallableStatement stmt = conn.prepareCall("{call get_process_log
我在我的应用程序中使用此方法来获取特定组织的子组织。它调用一个存储过程(创建一个临时表)。 StoredProcedureDAO.java private Connection dbConnectio
我试图调用一个带有指定参数名称的存储过程,但 JDBC 无法接受这些参数。它说: 方法 org.postgresql.jdbc4.Jdbc4CallableStatement.setObject(St
假设有一些 Oracle PL/SQL 过程,它接收 IN 参数并返回 OUT 游标参数。我有一个执行此过程的 jdbc 代码: DataSource dataSource; //dataso
我有这个 Java 代码: Connection conn = connectionProvider.getConnection(); statement = conn.prepareCall("ex
要在 Java 中仅使用简单的 JDBC 调用 Oracle 的存储过程,我们可以这样做: con.prepareCall("{ call ? = my_procedure(?) }"); callS
我正在遵循有关可调用语句的指南。 在本指南中,它说我需要使用以下语句注册 out 参数: callsts.registerOutParameter(2, java.sql.Types.VARCHAR)
当我从命令行调用存储过程时,我得到以下信息。 CALL `events`.`get_event_by_id`(10) +---------+----------+-------------+-----
需要有关 JDBC 查询的一些帮助。我本来想亲自尝试一下,但现在我无法访问数据库。 我的问题是:既然CallableStatement扩展了PreparedStatement,这是否意味着我们可以使用
我有一个 Java 应用程序,对通过网络接收的 UTF-8 编码的 String 进行解码,并将其保存到我的数据库 (SQL Server 2000) 中的 varchar 列中。我使用 JDBC 的
我在调用不返回任何内容的函数时出现 Java 异常: org.postgresql.util.PSQLException: A CallableStatement was executed with
我是一名优秀的程序员,十分优秀!