Oracle 在更改表或列之前,我可以检查它是否存在吗?
我正在处理一些Oracle数据库问题。 在我想要修改它之前,是否有可能检查表或列是否存在?如果没有,则不应执行代码 我已经尝试通过计数来检查这个表是否存在,但它似乎不适用于ALTEROracle 在更改表或列之前,我可以检查它是否存在吗?,oracle,plsql,Oracle,Plsql,我正在处理一些Oracle数据库问题。 在我想要修改它之前,是否有可能检查表或列是否存在?如果没有,则不应执行代码 我已经尝试通过计数来检查这个表是否存在,但它似乎不适用于ALTER declare w NUMBER; begin select count(*) into w from ALL_TABLES where TABLE_NAME='TAB'; if(w>0) then alter table TAB add C
declare
w NUMBER;
begin
select count(*) into w from ALL_TABLES where TABLE_NAME='TAB';
if(w>0) then
alter table TAB
add COLUMN_1 varchar(20);
end if;
end;
它似乎不适用于ALTER语句。此外,我还想在添加列时检查相同的选项(如果列不存在)。您必须使用所有的选项卡列:
declare
t NUMBER;
w NUMBER;
begin
-- checking if table exists
select count(*) into t from ALL_TABLES where TABLE_NAME='TAB';
-- checking if column does not exist
select count(*) into w
from ALL_TAB_COLUMNS
where TABLE_NAME='TAB' AND COLUMN_NAME = 'COLUMN_1';
if (t>0) AND (w=0) then
EXECUTE IMMEDIATE 'alter table TAB add COLUMN_1 varchar(20)';
end if;
end;
/
您必须使用所有选项卡列:
declare
t NUMBER;
w NUMBER;
begin
-- checking if table exists
select count(*) into t from ALL_TABLES where TABLE_NAME='TAB';
-- checking if column does not exist
select count(*) into w
from ALL_TAB_COLUMNS
where TABLE_NAME='TAB' AND COLUMN_NAME = 'COLUMN_1';
if (t>0) AND (w=0) then
EXECUTE IMMEDIATE 'alter table TAB add COLUMN_1 varchar(20)';
end if;
end;
/
您需要在代码中添加
立即执行:
declare
w NUMBER;
begin
select count(*) into w from ALL_TABLES where TABLE_NAME='TAB';
if(w>0) then
execute immediate 'alter table TAB add COLUMN_1 varchar(20)';
end if;
end;
您需要在代码中添加executeimmediate
:
declare
w NUMBER;
begin
select count(*) into w from ALL_TABLES where TABLE_NAME='TAB';
if(w>0) then
execute immediate 'alter table TAB add COLUMN_1 varchar(20)';
end if;
end;
若我记得正确的标签可能是一个旧的数据字典,并没有更多的使用,但现在向后兼容,所以最好使用另一个表名OK,谢谢。我只使用了它,例如,我的代码包含了更多的名称,所以我决定只在一个名称上尝试它。如果我记得右选项卡可能是一个旧的数据字典,不会被更多地使用,但为了向后兼容,所以最好使用另一个表名。好的,谢谢。我只使用了它,例如,我的代码包含更多的名称,所以我决定只在一个名称上尝试