群中有人提问:exp 导大小写混合的表名报错。
建表语句如下:
create table "aA" (c1 int);
导出语句如下:
exp scott/tiger tables="aA" ......
报错:EXP-00011: SYS.AA 不存在
看来,exp(11g win7)把表名进行转换了。转到sqlplus(11g linux32)中进行实验,create table "aA" (c1 int);和 create table aA(c1 int);可以同时创建成功,又可创建诸如create table "1234"(c1 int);的表。实际上Oracle对由""创建的表名会进行严格匹配,而普通的表名则要符合命名规范,在系统表中也是转换为大写再进行存储的。
由此我想到是不是需要对表名的双引号进行转义,于是进行实验:
exp scott/tiger tables=(sys."aA")......
exp scott/tiger tables=(/"aA/").......
exp scott/tiger tables=(/"sys.aA/")......
均不能成功,改成下面的语句即可成功执行,注意模式名一定要加上,否则还是会转化为大写。
exp scott/tiger tables=(sys./"aA/")......
对"1234"进行实验,均可成功,或许是因为数字不需要进行大小写转换的原因吧。
exp 'sys/orcl@orcl as sysdba' tables=(1234) file=c:/test.dmp;
exp 'sys/orcl@orcl as sysdba' tables=("1234") file=c:/test.dmp;