Oracle PL/SQL Developer跨Schema建表遇ORA-00906左括号缺失错误
解决跨Schema创建对象类型表时的ORA-00906错误
兄弟,看你贴出来的建表语句明显是半截的啊!这肯定会触发ORA-00906“缺少左括号”的错误——毕竟语句没写完,数据库根本没法解析。咱们一步步来搞定这个问题:
1. 先拿到完整的DDL脚本
你用dbms_metadata.getddl()拿脚本的时候,大概率没获取到完整内容。试试这么做:
- 先执行这条语句开启分号输出,避免脚本被截断:
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE); - 然后分别获取对象类型和表的完整DDL:
复制输出的时候要确保把所有内容都拷下来,包括末尾的分号和存储参数那些。-- 获取源Schema里的对象类型DDL SELECT DBMS_METADATA.GETDDL('TYPE', 'IBS_S_DOCUMENT_T_1', '你的源Schema名称') FROM DUAL; -- 获取源Schema里的表DDL SELECT DBMS_METADATA.GETDDL('TABLE', 'IBS_S_DOCUMENT_1', '你的源Schema名称') FROM DUAL;
2. 给目标Schema加权限
要在目标Schema里用源Schema的对象类型建表,目标Schema必须有该类型的EXECUTE权限。切换到源Schema的会话,执行授权:
GRANT EXECUTE ON "源Schema"."IBS_S_DOCUMENT_T_1" TO "目标Schema";
3. 修正建表语句的关键细节
你原来的语句有几个小问题,调整后应该是这样的(替换成你的实际Schema名称):
CREATE TABLE "目标Schema"."IBS_S_DOCUMENT_1" OF "源Schema"."IBS_S_DOCUMENT_T_1" ( CONSTRAINT "XPK_S_DOCUMENT" PRIMARY KEY ("CODE") USING INDEX ( CREATE UNIQUE INDEX "目标Schema"."XPK_S_DOCUMENT" ON "目标Schema"."IBS_S_DOCUMENT_1" ("CODE") -- 这里要保留原DDL里的存储参数,比如TABLESPACE、PCTFREE之类的 ) );
重点注意:
- 表和索引都要归属到目标Schema,别写成源Schema了
- 对象类型必须指定源Schema的名称,不然目标Schema找不到这个类型
- 确保所有括号都匹配,语句完整无截断
4. 验证执行
把完整的DDL复制到PL/SQL Developer的目标Schema会话里,先检查一遍有没有语法错误,比如括号没闭合、关键字拼写错,然后执行就行。如果还是有问题,把完整的报错信息和DDL贴出来,咱们再细查。
内容的提问来源于stack exchange,提问作者Sherzodbek
相关产品推荐
相关产品推荐

