在Edb/Postgres中执行oracle查询的等价物是什么?
SELECT proc_start_date "Process Start Date",
filename "Filename",
event_source "Event Source",
FROM Sample_table
WHERE process_start_date BETWEEN (TRUNC(:eff_date, 'dd') - CAST(:1 AS INTEGER)) AND
(TRUNC(:eff_date, 'dd') + 86399/86400) AND
proc_end_date IS NOT NULL AND
filename LIKE DECODE(:2, NULL, '%', '', '%', :2) AND
event_source LIKE DECODE(:3, NULL, '%', :3)
ORDER by 1, 2, 3
我应该做什么改变运行上述查询edb数据库使用perl的DBI。
我试着在edb下面:
SELECT proc_start_date "Process Start Date",
filename "Filename",
event_source "Event Source",
FROM sample_table
WHERE process_start_date BETWEEN (TRUNC(:eff_date, 'dd') - CAST(? AS INTEGER)) AND
(TRUNC(:eff_date, 'dd') + 86399/86400) AND
proc_end_date IS NOT NULL AND
filename LIKE DECODE(?, NULL, '%', '', '%', ?) AND
event_source LIKE DECODE(?, NULL, '%', ?)
ORDER by 1, 2, 3
但是它抛出了错误,说有5个绑定变量,但只为3传递了值。另外,在edb上运行查询还需要其他更改吗?
1条答案
按热度按时间k10s72fa1#
但它抛出错误,称有5个绑定变量,但只为3传递了值。
因为您已经从命名绑定变量更改为未命名绑定变量,所以需要传递第二个和第三个绑定变量值两次。
因此,如果您传递值
1
、a
和b
,则需要传递1
、a
、a
、b
和b
来绑定所有变量。如果需要重写查询以避免
DECODE
,则:1
,a
,a
,a
,b
,b
,b
来绑定所有变量;但是,在Oracle中,''
和NULL
是相同的,因此您不需要进行? = ''
比较,可以将其删除并返回到第2个和第3个参数的2个副本。)*