【问题标题】:Call function with defined types定义类型的调用函数
【发布时间】:2014-09-20 05:45:43
【问题描述】:

我创建了自己的 Postgres 函数:

CREATE OR REPLACE FUNCTION myfunction(
param_val1 varchar(255),
param_cal2 VARCHAR(255), 
param_val3 VARCHAR(255),
param_val4 current_category,
param_val5 current_type,
param_val6  VARCHAR(255),
param_val7 bigint,
param_val8 text )

我想用 jdbc 调用它:

callableStatement = conn.prepareCall("{call myfunction(?,?,?,?,?,?,?,?)}");

  callableStatement.setString(1, "item1");
  callableStatement.setString(2, "domain1");
  callableStatement.setString(3, "indicator1");
  callableStatement.setString(4, "PROPERTY");
  callableStatement.setString(5, "STRING");
  callableStatement.setString(6, "on");
  callableStatement.setLong(7, 1396983600);
  callableStatement.setString(8, "testing");

但我明白了:

org.postgresql.util.PSQLException: ERROR: function addindicators(character varying,     character varying, character varying, character varying, character varying, character varying, bigint, character varying) does not exist
  Hint: No function matches the given name and argument types. You might need to add     explicit type casts.
  Position: 15

current_categorycurrent_type 是枚举。我需要创建 java 枚举然后使用 setObject(#, Object) 吗?

【问题讨论】:

    标签: function postgresql jdbc types


    【解决方案1】:

    一种方法是将函数定义为采用 text / varchar 参数并转换为函数内的 enum 类型。示例代码:

    CREATE OR REPLACE FUNCTION myfunction( ..., param_val4 text, ...)
    ...
    DECLARE
      _param_val4 current_category := param_val4::current_category;
      ...
    BEGIN
    ...
    

    但在 Java 中可能有一种方法可以在没有显式类型的情况下调用此函数(我不知道)。如果您可以为枚举发送无类型字符串("unknown" 类型的字符串文字),Postgres 会自动为该函数找到最佳匹配。

    【讨论】:

    • @EliMiller:铸造很简单。我添加了一个代码示例。
    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多