Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 或者操作员太慢,我应该重写到IF_其他吗?_Sql_Oracle - Fatal编程技术网

Sql 或者操作员太慢,我应该重写到IF_其他吗?

Sql 或者操作员太慢,我应该重写到IF_其他吗?,sql,oracle,Sql,Oracle,所以今天我必须调整一个旧程序。我进入这个查询(所有列、表的名称都已更改): 查询计划(对于具有修复代码的单个查询,不声明WHERE('11111'=''或col1='11111')): 或声明: 如果声明: 其他声明: 试试这段代码 SELECT col1, col2, col3, col4, col5, MAX(col6) FROM data_table WHERE col1 = decode(l_col1, ' ', col1) AND col

所以今天我必须调整一个旧程序。我进入这个查询(所有列、表的名称都已更改):

查询计划(对于具有修复代码的单个查询,不声明
WHERE('11111'=''或col1='11111')
):

或声明:

如果声明:

其他声明:

试试这段代码

SELECT col1, col2, col3, col4, col5, MAX(col6) 
    FROM data_table 
    WHERE col1 = decode(l_col1, ' ', col1)
            AND col6 <= l_col6
    GROUP BY col1, col2, col3, col4, col5;
选择col1、col2、col3、col4、col5、MAX(col6)
从数据表
其中col1=解码(l_col1',,col1)

和col6如果l_col1='11111'为什么首先要检查“”?@Rene Sr我无法为
其中(l_col1=''或col1=l_col1)
生成查询计划,所以我必须硬编码
l_col1
是传递给过程的参数。使用空值会有区别吗?其中(l_col1为null或l_col1=col1)。@Rene
(l_col1为null或col1=l_col1)
运行min time=0.2秒,通常为~0.21秒显示我们正在谈论的许多插入记录?谢谢,您的建议解决了我的第二个问题。
DECLARE
    l_col1 varchar2(20) := '11111';
    l_col6 number := 20160131;
BEGIN
    IF l_col1 = ' '
    THEN
        INSERT INTO temp_table (col1, col2, col3, col4, col5, col6)
        SELECT col1, col2, col3, col4, col5, MAX(col6) 
        FROM data_table 
        WHERE col6 <= l_col6
        GROUP BY col1, col2, col3, col4, col5;
    ELSE
        INSERT INTO temp_table (col1, col2, col3, col4, col5, col6)
        SELECT col1, col2, col3, col4, col5, MAX(col6) 
        FROM data_table 
        WHERE  col1 = l_col1
                AND col6 <= l_col6
        GROUP BY col1, col2, col3, col4, col5;
    END IF;
END;
SELECT col1, col2, col3, col4, col5, MAX(col6) 
    FROM data_table 
    WHERE col1 = decode(l_col1, ' ', col1)
            AND col6 <= l_col6
    GROUP BY col1, col2, col3, col4, col5;