gpt4 book ai didi

java - 从 Groovy Sql 调用函数

转载 作者:行者123 更新时间:2023-12-02 00:43:53 24 4
gpt4 key购买 nike

我正在尝试调用 Oracle 中的一个函数来截断我传入的表名。不幸的是,我不断收到以下错误,但不知道为什么。

WARNING: Failed to execute: {? = call trunc_table(?)} because: Invalid column type
java.sql.SQLException: Invalid column type
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:147)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:209)
at oracle.jdbc.driver.OracleStatement.getInternalType(OracleStatement.java:3462)
at oracle.jdbc.driver.OracleCallableStatement.registerOutParameterInternal(OracleCallableStatement.java:126)
at oracle.jdbc.

我可以从表中选择行并打印到控制台。另外,我可以毫无问题地调用 dbms_utility.get_time() 函数。

这是有问题的代码。

      def storedProcCall =
"""{? = call trunc_table(?)}"""
sql.call(storedProcCall, [Sql.BOOLEAN, 'YFS_ZIP_CODE_LOCATION'])
{
println it
}

我希望返回 true 或 false 以了解该函数是否成功

create or replace
FUNCTION TRUNC_TABLE
(table_name IN VARCHAR2) RETURN BOOLEAN
IS

cid INTEGER; -- Cursor ID.

BEGIN

cid := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(cid, 'TRUNCATE TABLE ' || table_name, dbms_sql.native);


DBMS_SQL.CLOSE_CURSOR(cid);

RETURN TRUE;

EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(cid);
dbms_output.put_line('Error truncating table: '||table_name);
dbms_output.put_line(SQLERRM);
RETURN FALSE;
END TRUNC_TABLE;

最佳答案

问题在于 Oracle 中的 BOOLEAN 仅存在于 PL/SQL 范围内,因此它不会绑定(bind)回 JDBC 变量。

我获取了您的函数代码,将返回类型设为NUMBER,并返回 0 表示 false,1 表示 true。然后我这样调用它:

import groovy.sql.*;
import java.sql.*;
sql = Sql.newInstance("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger", "oracle.jdbc.driver.OracleDriver");
sql.call("{? = call TRUNC_TABLE(?)}", [Sql.NUMERIC, "FOO"]) { result ->
println result;
}

结果为 1 表示良好的表,0 表示不存在的表(或者可能是函数执行中出现任何错误)。

关于java - 从 Groovy Sql 调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9116305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com