写sql时,使用where 1=1进行条件拼接时 如果第一个条件不成立时,后面的条件会继续执行吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写sql时,使用where 1=1进行条件拼接时 如果第一个条件不成立时,后面的条件会继续执行吗相关的知识,希望对你有一定的参考价值。

参考技术A 在SQL查询中,
1.用and连接时,条件1不成立,后面不再执行(称为短路与)
2.用or连接时,条件1成立,后面也不再执行(称为短路或)追问

懂了 谢谢

本回答被提问者采纳
参考技术B 判断1 or 判断2
如果1成立,2不会执行
判断1 and 判断2
如果1不成立,2不会执行追问

意思是and拼接条件时,只要条件1不成立 即使条件2成立也不会执行吗?

动态sql中的where子句

【中文标题】动态sql中的where子句【英文标题】:Where clause in Dynamic sql 【发布时间】:2017-06-19 19:38:25 【问题描述】:

我正在尝试获取 bank_id 为 01 的所有表。 我已经写了以下代码块

DECLARE

 cursor cBankId is
     select owner||'.'||table_name from all_tab_columns where column_name = 'BANK_ID';
        v_table     all_tab_columns.table_name%TYPE;
        vcount varchar2(50);

BEGIN

     open cBankId;
    loop
        fetch cBankId into v_table;
        exit when cBankId%notfound;

execute immediate 'select count(*) from ' || v_table into vcount || ' where bank_id  = 01';


IF vcount > 0 THEN
    DBMS_OUTPUT.PUT_LINE (v_table);
END IF;

end loop;
    close cBankId;

END;

我想知道如何将 where 子句放在执行立即语句中。 我收到错误 ORA-06550:第 15 行,第 67 列: PLS-00103:遇到符号“|”预期以下情况之一时:

。 ( , % ; return 返回使用

【问题讨论】:

【参考方案1】:

您只需要更改编写查询部分的顺序。 使用动态 SQL 时,您需要这样的东西:

SQL> declare
  2      v_table varchar2(30);
  3      vCount  number;
  4  begin
  5      v_table := 'dual';
  6      execute immediate 'select count(*) from ' || v_table  || ' where 1=1' into vcount;
  7      --
  8      dbms_output.put_line('vCount: ' || vCount);
  9  end;
 10
 11  /
vCount: 1

PL/SQL procedure successfully completed.

即:execute immediate 'select ... from ... where ...' INTO ...;

【讨论】:

【参考方案2】:

您不能动态使用变量作为表名,而是使用:

DECLARE

cursor cBankId is
 select owner||'.'||table_name from all_tab_columns where column_name = 'BANK_ID';
    v_table     all_tab_columns.table_name%TYPE;
    vcount varchar2(50);
    v_sql varchar2(1000);


BEGIN

 open cBankId;
loop
    fetch cBankId into v_table;
    exit when cBankId%notfound;

v_sql := 'select count(*) from ' || v_table || ' into vcount where bank_id  = 01';   

execute immediate v_sql;

IF vcount > 0 THEN
    DBMS_OUTPUT.PUT_LINE (v_table);
END IF;

end loop;
    close cBankId;

END;

【讨论】:

您可以使用变量作为表名。另外,这行得通吗?

以上是关于写sql时,使用where 1=1进行条件拼接时 如果第一个条件不成立时,后面的条件会继续执行吗的主要内容,如果未能解决你的问题,请参考以下文章

C# 多条件拼接sql

java动态拼接sql语句并且执行时给sql语句的参数赋值

sql 存储过程如何动态拼接where后面的条件

为什么会有人写 where1=1?

sql的where条件中是不是null相关条件怎么写

sql语句拼接字段后再模糊查询如何写啊?