写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进行条件拼接时 如果第一个条件不成立时,后面的条件会继续执行吗的主要内容,如果未能解决你的问题,请参考以下文章