【问题标题】:Mirth Connect Database Reader not returning a resultMirth Connect 数据库阅读器不返回结果
【发布时间】:2021-06-28 08:24:54
【问题描述】:

我正在尝试使用下面的 postgreSQL 块设置一个通道,其中源作为数据库读取器,目标作为文件写入器,以将结果存储在特定目录中的 xlm 文件。在我启用通道后设置通道后,它只会停留在轮询状态,服务器日志中出现以下错误。 但是当我用一个简单的选择查询替换这个块时,它就可以工作了。如果您能帮助我了解我哪里出错了或者 Mirth 频道没有读取 psql 块,那将非常有帮助?

declare
  tableName text;
  msgCount int;
  channelName text;
  channelID text;
  countDate date;
  PortNum text;
begin
  raise info ' | CHANNEL NAME | CHANNEL ID | DATE | COUNT | PORT NUM';
  execute 'select CURRENT_DATE-1' into countDate;
  <<"Yesterday's Received Message Count">>
  for tableName in (select local_channel_id from d_channels) loop
    execute 'select count(*) from d_mm' || tableName || ' where connector_name = ''Source'' and received_date between (select CURRENT_DATE-31 || '' 00:00:00.00'')::timestamp and (select CURRENT_DATE-1 || '' 23:59:59.99'')::timestamp' into msgCount;
    execute 'select channel.name from channel inner join d_channels on d_channels.channel_id = channel.id where d_channels.local_channel_id = '|| tableName into channelName;
    execute 'select channel.id from channel inner join d_channels on d_channels.channel_id = channel.id where d_channels.local_channel_id = '|| tableName into channelID;
    execute 'select substring (channel.channel, position (''<port>'' IN channel)+6, 4) AS port from channel inner join d_channels on d_channels.channel_id = channel.id where d_channels.local_channel_id = '|| tableName into PortNum;
    raise info ' | %', channelName || ' | ' || channelID || ' | ' || countDate || ' | '|| msgCount || ' | '|| PortNum;
  end loop "Yesterday's Received Message Count";
end;
$channelLoop$;

错误:

[2021-06-28 04:07:16,410]  ERROR  (com.mirth.connect.connectors.jdbc.DatabaseReceiverQuery:207): An error occurred while polling for messages, retrying after 10000 ms...
org.postgresql.util.PSQLException: No results were returned by the query.
    at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:117)
    at com.mirth.connect.connectors.jdbc.DatabaseReceiverQuery.poll(DatabaseReceiverQuery.java:190)
    at com.mirth.connect.connectors.jdbc.DatabaseReceiver.poll(DatabaseReceiver.java:111)
    at com.mirth.connect.donkey.server.channel.PollConnectorJob.execute(PollConnectorJob.java:49)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)

【问题讨论】:

    标签: mirth


    【解决方案1】:

    老实说,我不确定这里发生了什么。

    Mirth 将使用您在 DB Reader 中放置的任何内容作为 SQL 查询,并使用您选择的任何 JDBC 驱动程序使用它来创建java.sql.PreparedStatement。然后它执行 PreparedStatement,如果需要,根据您是否使用替换标记传递任何参数。

    我不知道 postgres 驱动程序是否允许将其编译为准备好的语句并执行。看起来可能是这样,因为直到您尝试执行查询之后它才会抱怨。

    问题似乎是查询没有返回 ResultSet。查看您的代码,我认为您正在将输出发送到 postgres 日志?

    【讨论】:

    • 感谢您的回复。但我仍然在后端使用相同的 P-SQL 块来手动提取报告并返回 ResultSet。
    • 我认为错误非常清楚地表明“查询未返回任何结果”。我也没有看到任何不选择变量的选择语句。你在做什么才能真正返回一些东西?
    • 据我所知,您提出的消息需要通过语句对象上的 getWarnings() 方法检索,但它们不是 ResultSet 的一部分。
    猜你喜欢
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多