如何解决Mirth Connect 数据库读取器未返回结果
我正在尝试使用以下 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 将把您在 DB Reader 中放入的任何内容作为 SQL 查询,并使用它使用您选择的任何 JDBC 驱动程序创建一个 java.sql.PreparedStatement
。然后它执行 PreparedStatement,并根据您是否使用替换令牌在必要时传递任何参数。
我不知道 postgres 驱动程序是否允许将其编译为准备好的语句并执行。看起来可能确实如此,因为直到您尝试执行查询后它才会抱怨。
问题似乎是查询没有返回 ResultSet。查看您的代码,我认为您将输出发送到 postgres 日志?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。