我有以下块
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。
为什么呢?
答案 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(*)相同。