2
我想调用Oracle中的一个函数来截断我传入的表名。 不幸的是,我不断收到以下错误,并且不知道为什么。从Groovy Sql调用函数
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
}
我希望能找回真或假找出如果函数成功
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;
完美的工作!非常感谢! – Carl 2012-02-02 19:22:48
NP!你能标记答案完整吗? – Nicholas 2012-02-02 20:10:03
是的,再次感谢你。 – Carl 2012-02-03 17:53:44