我正在尝试在MS Access中创建传递查询。该查询通过ODBC连接到Oracle DB。
我的查询在SQL Developer中运行良好,但它包含CASE (...) END
构造。
正如我发现here,Oracle ODBC驱动程序存在问题,其中包含单词end
解释。我收到了一个错误。
有没有办法解决这个问题?
我的查询:
SELECT
CASE
WHEN PHORGEN.NR_wniosku LIKE 'PHR%'
THEN 'text1'
WHEN PHORGEN.NR_wniosku LIKE 'PBR%'
THEN 'text2'
ELSE 'text3'
END field1,
CASE
WHEN PHORGEN.NR_wniosku IS NULL
THEN reklcomp.solution_date
ELSE
CASE
WHEN phorsol.OPIS_ROZWIAZANIA = '3'
THEN rekldet.SOLUTION_SENDING_DATE
ELSE NVL(
(SELECT MIN(DATA_KSIEGOWANIA)
FROM phorbook
WHERE POWOD_KSIEGOWANIA = '1'
AND Nr_Wniosku = PHORGEN.Nr_Wniosku
),rekldet.SOLUTION_SENDING_DATE)
END
END field2
FROM rgen
JOIN reklcomp
ON rgen.UIDINSTANCEID = reklcomp.UIDINSTANCEID
JOIN rekldet
ON rgen.UIDINSTANCEID = rekldet.UIDINSTANCEID
JOIN reklclient
ON rgen.UIDINSTANCEID = reklclient.UIDINSTANCEID
LEFT JOIN phorgen
ON RGEN.NR_WNIOSKU = PHORGEN.NUMER_OAR
LEFT JOIN phorsol
ON PHORGEN.UIDINSTANCEID = phorsol.UIDINSTANCEID
答案 0 :(得分:1)
您也可以使用DECODE功能。
我对ORACLE SQL并不熟悉,但我已经有一些时间进行搜索了,我认为它应该可行。
SELECT
DECODE(SUBSTR(PHORGEN.NR_wniosku, 1, 3)
, 'PHR', 'text1'
, 'PBR', 'text2'
, 'text3') field1
, DECODE(PHORGEN.NR_wniosku
, NULL, reklcomp.solution_date
, DECODE(phorsol.OPIS_ROZWIAZANIA
, '3', rekldet.SOLUTION_SENDING_DATE
, NVL((SELECT MIN(DATA_KSIEGOWANIA)
FROM phorbook
WHERE POWOD_KSIEGOWANIA = '1'
AND Nr_Wniosku = PHORGEN.Nr_Wniosku
),rekldet.SOLUTION_SENDING_DATE))) field2
FROM rgen
JOIN reklcomp
ON rgen.UIDINSTANCEID = reklcomp.UIDINSTANCEID
JOIN rekldet
ON rgen.UIDINSTANCEID = rekldet.UIDINSTANCEID
JOIN reklclient
ON rgen.UIDINSTANCEID = reklclient.UIDINSTANCEID
LEFT JOIN phorgen
ON RGEN.NR_WNIOSKU = PHORGEN.NUMER_OAR
LEFT JOIN phorsol
ON PHORGEN.UIDINSTANCEID = phorsol.UIDINSTANCEID
答案 1 :(得分:0)
我找到了解决方案。这很简单:)
Oracle ODBC驱动程序不允许在查询中的单词WebDriverWait(browser, 4).until(EC.presence_of_element_located((By.LINK_TEXT,'All friends')))
后使用分号。所以我删除了传递查询定义中的分号,它的工作原理!
谢谢伙伴们的回答。