当条件存在时,选择计数总是给予

时间:2014-09-04 07:35:40

标签: oracle

我有以下块

declare TABLE_NAME varchar(200);
ALTCOUNT number(2);
TABLE_NAME ='TEST';
begin
ALTCOUNT :=0;
SELECT COUNT(1) INTO ALTCOUNT FROM A_TABLES A WHERE A.TABLE_NAME = ''||UPPER(TABLE_NAME)||'';
IF ALTCOUNT =0 THEN
EXECUTE IMMEDIATE ('insert into A_TABLES (TABLE_NAME ,A_TABLE_NAME) values('a','w');
end;

我的问题在于此查询

  

从A_TABLES中选择COUNT(1)INTO ALTCOUNT A.TABLE_NAME =''|| UPPER(TABLE_NAME)||'';

即使a.table name ='TEST and table_name ='TEST'计数(1)始终= 0。  为什么呢?

2 个答案:

答案 0 :(得分:4)

您正在查询名为'TEST'的表格,其中包含引号。至少我认为你是,虽然你所表现出来的不会赢。你不需要引用变量。但是,您通过为变量提供与表列相同的名称来创建范围问题,因此请使用其他内容 - 通常使用前缀:

declare
  l_table_name varchar2(200);
  l_count number(2);
begin
  l_table_name := 'TEST';

  select count(1) into l_count
  from a_tables a
  where a.table_name = l_table_name;

  if l_count = 0 then
    insert into a_tables (table_name, a_table_name) values ('a','w');
  end if;
end;
/

如图所示,您还有其他一些问题可能导致此操作无法运行,所以我想这不是您的实际代码。您也不需要动态SQL,因此我已将其删除。

答案 1 :(得分:2)

改变这个:

WHERE A.TABLE_NAME = ''||UPPER(TABLE_NAME)||''

WHERE A.TABLE_NAME = UPPER(table_name)

在较新版本中, COUNT(1) COUNT(*)相同。