我正在使用 cursor_sharing ='FORCE'
这可以由SYSTEM用户执行以下语句来设置:
alter system set cursor_sharing ='FORCE'cope = both;
对于少数查询,我想使用提示CURSOR_SHARING_EXACT,但它在CASE语句中失败。
例如,Query1有效,但使用提示CURSOR_SHARING_EXACT(Query2)的同一查询失败。
请说明为什么表达不足
注意:我不能把CURSOR_SHARING_EXACT放在它工作的外部SELECT上。
查询1:
选择案例
WHEN(从1中选择1,其中1 = 2)IS NOT NULL
然后'''''''''''''''''''''''''''''''''''''
Query1的输出: N
查询2:
选择案例
WHEN(选择/ * + CURSOR_SHARING_EXACT * / 1来自双,其中1 = 2)IS NOT NULL
然后'''''''''''''''''''''''''''''''''''''
Query2的输出(错误):
Error starting at line 1 in command: SELECT CASE WHEN (select /*+ CURSOR_SHARING_EXACT */ 1 from dual where 1 = 2) IS NOT NULL THEN 'Y' ELSE 'N' END temp FROM dual Error at Command Line:2 Column:7 Error report: SQL Error: ORA-00936: missing expression
00936。 00000 - “缺少表达”
*原因:
*操作:
答案 0 :(得分:1)
1)我将HINT
放在父查询上,现在没问题,尝试这样做:
SELECT /*+ CURSOR_SHARING_EXACT */
CASE
WHEN (SELECT /*+ CURSOR_SHARING_EXACT */ 1 from dual where 1 = 2) IS NOT NULL
THEN 'Y'
ELSE 'N'
END temp
FROM dual;
2)或者作为临时解决方案,您可以使用decode
的{{1}}个实例:
case
3)另一种替代解决方案是:
SELECT DECODE ((select /*+ CURSOR_SHARING_EXACT */ 1 from dual where 1 = 2), NULL, 'N', 'Y') FROM dual;