FOR k IN (SELECT UC.CONSTRAINT_NAME, UC.TABLE_NAME FROM USER_CONSTRAINTS UC, TMP_DATA_MIG TDM
WHERE UC.TABLE_NAME = TDM.TABLE_NAMES AND UC.CONSTRAINT_TYPE IN('R','C','U')) LOOP
EXECUTE IMMEDIATE 'ALTER TABLE '||k.TABLE_NAME||' DISABLE CONSTRAINT '||k.CONSTRAINT_NAME||' CASCADE';
END LOOP;
在FOR..IN上面循环将TMP_DATA_MIG
中的表名与USER_CONSTRAINTS
连接起来以获得相应的约束并禁用它们。
我正在
ORA-00911 "invalid character"
我尝试使用绑定变量
编写它FOR k IN (SELECT UC.CONSTRAINT_NAME, UC.TABLE_NAME FROM USER_CONSTRAINTS UC, TMP_DATA_MIG_TABLE_LIST TDM WHERE UC.TABLE_NAME = TDM.TABLE_NAMES AND UC.CONSTRAINT_TYPE IN('R','C','U')) LOOP
l_sql := 'ALTER TABLE :TABLE_NAME DISABLE CONSTRAINT :CONSTRAINT_NAME CASCADE';
EXECUTE IMMEDIATE l_sql USING k.TABLE_NAME,k.CONSTRAINT_NAME;
END LOOP;
以上代码获得ORA-00903 "invalid table name"
如何在任何一种方法中纠正它?
答案 0 :(得分:0)
您无法使用"使用"在这种情况下。只需连接字符串并执行。
现在,由于这会给您一个错误消息,因此打印您尝试执行的字符串并查看可能导致问题的原因始终是有用的。
for k in (select uc.constraint_name
,uc.table_name
from user_constraints uc
,tmp_data_mig_table_list tdm
where uc.table_name = tdm.table_names
and uc.constraint_type in ('R', 'C', 'U'))
loop
l_sql := 'ALTER TABLE '||k.table_name||' DISABLE CONSTRAINT '||k.constraint_name||' CASCADE';
dbms_output.put_line(l_sql);
execute immediate l_sql;
end loop;
答案 1 :(得分:0)
我找到了根本原因,其中一个约束名称以“_”开头,因此被检测为无效字符。