gpt4 book ai didi

java - Plpgsql 函数将 BigInt 转换为 XID 和 java

转载 作者:行者123 更新时间:2023-11-29 13:32:21 36 4
gpt4 key购买 nike

很抱歉,如果这个问题已经有人回答了,但我自己找不到。

我在 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.

附言对于这个问题,我找不到更好的标题了。请按您认为合适的方式更正。

最佳答案

在其他人提出更好的方法之前,以下方法对我有用:

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;

关于java - Plpgsql 函数将 BigInt 转换为 XID 和 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20531151/

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