【问题标题】:How to conditionally call procedure in prepared statement?如何在准备好的语句中有条件地调用过程?
【发布时间】:2021-04-26 21:54:45
【问题描述】:

我正在尝试并没有做类似的事情:

SELECT CASE WHEN 'Cleared' = ? THEN call alarm_clear_check(?, ?) ELSE call alarm_create(?,?,?,?) END

很遗憾,我无法将它们合并到一个过程中,因此我需要在一个语句中像这样调用它们。

到目前为止,似乎没有办法,但我想知道是否可以像这样有条件地调用一个过程?

【问题讨论】:

  • 这看起来应该可以了。你真的试过了吗?
  • 不,你不能像这样使用调用。你能创建第三个过程来处理这个逻辑吗?
  • CALL 是一条 SQL 语句,而不是可以在另一个表达式中使用的表达式。
  • 不幸的是,由于限制,我无法创建另一个 proc,这不起作用(我试过)

标签: java postgresql jdbc plpgsql


【解决方案1】:

你可以像这样使用 PL/pgSQL 来做到这一点:

do $$
begin
if 'Cleared' = ? 
   call alarm_clear_check(?, ?) 
else 
   call alarm_create(?,?,?,?)
end if   
end $$

【讨论】:

  • 虽然这似乎不能作为 jdbc 准备好的语句工作,但我无法创建单独的 proc
  • hmmm... 那么你必须在后端代码中处理它
猜你喜欢
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
相关资源
最近更新 更多