很抱歉,如果这已经得到解答,但我自己也找不到。
我在plgsql中有一个这样的函数:
CREATE OR REPLACE FUNCTION collect_transaction_data(xid) RETURNS TEXT AS
$$
DECLARE
...
BEGIN
IF EXISTS (SELECT 1 FROM my_transactions WHERE my_tx_id = $1) THEN
-- Do something useful...
...
END IF;
END;
$$ LANGUAGE plpgsql;
如果我编写一个使用当前事务ID在postgres中调用此函数的小函数,一切正常:
PERFORM collect_transaction_data(current_tx_id);
但是,如果我尝试从Java调用相同的函数,它会抱怨具有整数值的函数不存在(就是这种情况)。我有一个类似于以下的代码:
public boolean testCollectTransactionData(BigInteger my_tx_id)
{
String sql = String.format("SELECT amqp.collect_transaction_data(%s) AS my_result",
my_tx_id.toString());
java.sql.Statement tx_st = m_oTxDbConnector.getDbConnection().createStatement();
java.sql.ResultSet tx_rs = tx_st.executeQuery(sql);
tx_rs.next();
String my_result = tx_rs.getString("my_result");
...
}
如果我使用相同的方法使用SQL语句,它可以正常工作(来自Java):
String sql = String.format("SELECT * FROM my_test_table WHERE my_tx_id = %s",
my_tx_id.toString());
java.sql.Statement tx_st = m_oTxDbConnector.getDbConnection().createStatement();
java.sql.ResultSet tx_rs = tx_st.executeQuery(sql);
...
我做错了什么?有办法吗?
非常感谢任何帮助,
d
PS 的。 我无法找到这个问题的更好标题。如你所见,请更正。
答案 0 :(得分:1)
在其他人提出更好的方法之前,以下内容对我有效:
CREATE OR REPLACE FUNCTION collect_transaction_data(bigint) RETURNS TEXT AS $$
DECLARE
my_tx_id_from_int xid;
...
BEGIN
my_tx_id_from_int := $1;
IF EXISTS (SELECT 1 FROM my_transactions WHERE my_tx_id = my_tx_id_from_int) THEN
-- Do something useful...
...
END IF;
END;
$$ LANGUAGE plpgsql;