Oracle SQL Developer 的一个Bug

简介:
Oracle SQL Developer是Oracle近几年来推出的一款免费的图形界面SQL PL/SQL开发工具,在11g中它甚至被集成到了Oracle server软件中;如果你平常有用这款IDE的话,大概会注意到它提供了十分实用的Database copy,diff,export功能。 当在Oracle SQL developer中使用sys用户登录数据库,并尝试导出某些schema的ddl定义时,可能会丢失一些constraint约束的ddl信息,如以下例子:   我们尝试导出scott用户的表,索引以及约束的相关ddl,当使用sys用户登录数据库时,Oracle SQL developer给出的SQL:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
--------------------------------------------------------
--  File created - Monday-August-30-2010
--------------------------------------------------------
--------------------------------------------------------
--  DDL for Table BONUS
--------------------------------------------------------
 
   CREATE  TABLE  "BONUS"
    (     "ENAME"  VARCHAR2(10),
     "JOB"  VARCHAR2(9),
     "SAL"  NUMBER,
     "COMM"  NUMBER
    ) ;
--------------------------------------------------------
--  DDL for Table DEPT
--------------------------------------------------------
 
   CREATE  TABLE  "DEPT"
    (     "DEPTNO"  NUMBER(2,0),
     "DNAME"  VARCHAR2(14),
     "LOC"  VARCHAR2(13)
    ) ;
--------------------------------------------------------
--  DDL for Table EMP
--------------------------------------------------------
 
   CREATE  TABLE  "EMP"
    (     "EMPNO"  NUMBER(4,0),
     "ENAME"  VARCHAR2(10),
     "JOB"  VARCHAR2(9),
     "MGR"  NUMBER(4,0),
     "HIREDATE"  DATE ,
     "SAL"  NUMBER(7,2),
     "COMM"  NUMBER(7,2),
     "DEPTNO"  NUMBER(2,0)
    ) ;
--------------------------------------------------------
--  DDL for Table SALGRADE
--------------------------------------------------------
 
   CREATE  TABLE  "SALGRADE"
    (     "GRADE"  NUMBER,
     "LOSAL"  NUMBER,
     "HISAL"  NUMBER
    ) ;
 
--------------------------------------------------------
--  DDL for Index PK_DEPT
--------------------------------------------------------
 
   CREATE  UNIQUE  INDEX  "PK_DEPT"  ON  "DEPT"  ( "DEPTNO" )   ;
--------------------------------------------------------
--  DDL for Index PK_EMP
--------------------------------------------------------
 
   CREATE  UNIQUE  INDEX  "PK_EMP"  ON  "EMP"  ( "EMPNO" )   ;
以上SQL中未给出PK和FK约束的ddl信息。 如果使用scott用户登录数据库,导出自身schema的table,index,constraint定义信息时:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
--------------------------------------------------------
--  File created - Monday-August-30-2010
--------------------------------------------------------
--------------------------------------------------------
--  DDL for Table BONUS
--------------------------------------------------------
 
   CREATE  TABLE  "BONUS"
    (     "ENAME"  VARCHAR2(10),
     "JOB"  VARCHAR2(9),
     "SAL"  NUMBER,
     "COMM"  NUMBER
    ) ;
--------------------------------------------------------
--  DDL for Table DEPT
--------------------------------------------------------
 
   CREATE  TABLE  "DEPT"
    (     "DEPTNO"  NUMBER(2,0),
     "DNAME"  VARCHAR2(14),
     "LOC"  VARCHAR2(13)
    ) ;
--------------------------------------------------------
--  DDL for Table EMP
--------------------------------------------------------
 
   CREATE  TABLE  "EMP"
    (     "EMPNO"  NUMBER(4,0),
     "ENAME"  VARCHAR2(10),
     "JOB"  VARCHAR2(9),
     "MGR"  NUMBER(4,0),
     "HIREDATE"  DATE ,
     "SAL"  NUMBER(7,2),
     "COMM"  NUMBER(7,2),
     "DEPTNO"  NUMBER(2,0)
    ) ;
--------------------------------------------------------
--  DDL for Table SALGRADE
--------------------------------------------------------
 
   CREATE  TABLE  "SALGRADE"
    (     "GRADE"  NUMBER,
     "LOSAL"  NUMBER,
     "HISAL"  NUMBER
    ) ;
 
--------------------------------------------------------
--  Constraints for Table EMP
--------------------------------------------------------
 
   ALTER  TABLE  "EMP"  ADD  CONSTRAINT  "PK_EMP"  PRIMARY  KEY  ( "EMPNO" ) ENABLE;
 
--------------------------------------------------------
--  Constraints for Table DEPT
--------------------------------------------------------
 
   ALTER  TABLE  "DEPT"  ADD  CONSTRAINT  "PK_DEPT"  PRIMARY  KEY  ( "DEPTNO" ) ENABLE;
--------------------------------------------------------
--  DDL for Index PK_EMP
--------------------------------------------------------
 
   CREATE  UNIQUE  INDEX  "PK_EMP"  ON  "EMP"  ( "EMPNO" )   ;
--------------------------------------------------------
--  DDL for Index PK_DEPT
--------------------------------------------------------
 
   CREATE  UNIQUE  INDEX  "PK_DEPT"  ON  "DEPT"  ( "DEPTNO" )  ;
 
--------------------------------------------------------
--  Ref Constraints for Table EMP
--------------------------------------------------------
 
   ALTER  TABLE  "EMP"  ADD  CONSTRAINT  "FK_DEPTNO"  FOREIGN  KEY  ( "DEPTNO" )
       REFERENCES  "DEPT"  ( "DEPTNO" ) ENABLE;

Oracle SQL developer给出了正确的SQL,包含FK和PK约束。 这个Bug在8月(2010 Aug)被确认将影响此前所有版本的Oracle SQL developer。


本文转自maclean_007 51CTO博客,原文链接:http://blog.51cto.com/maclean/1277141

相关文章
|
6天前
|
SQL 存储 Oracle
Oracle的PL/SQL定义变量和常量:数据的稳定与灵动
【4月更文挑战第19天】在Oracle PL/SQL中,变量和常量扮演着数据存储的关键角色。变量是可变的“魔术盒”,用于存储程序运行时的动态数据,通过`DECLARE`定义,可在循环和条件判断中体现其灵活性。常量则是不可变的“固定牌”,一旦设定值便保持不变,用`CONSTANT`声明,提供程序稳定性和易维护性。通过 `%TYPE`、`NOT NULL`等特性,可以更高效地管理和控制变量与常量,提升代码质量。善用两者,能优化PL/SQL程序的结构和性能。
|
6天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标属性:数据的“导航仪”与“仪表盘”
【4月更文挑战第19天】Oracle PL/SQL游标属性如同车辆的导航仪和仪表盘,提供丰富信息和控制。 `%FOUND`和`%NOTFOUND`指示数据读取状态,`%ROWCOUNT`记录处理行数,`%ISOPEN`显示游标状态。还有`%BULK_ROWCOUNT`和`%BULK_EXCEPTIONS`增强处理灵活性。通过实例展示了如何在数据处理中利用这些属性监控和控制流程,提高效率和准确性。掌握游标属性是提升数据处理能力的关键。
|
6天前
|
SQL Oracle 安全
Oracle的PL/SQL循环语句:数据的“旋转木马”与“无限之旅”
【4月更文挑战第19天】Oracle PL/SQL中的循环语句(LOOP、EXIT WHEN、FOR、WHILE)是处理数据的关键工具,用于批量操作、报表生成和复杂业务逻辑。LOOP提供无限循环,可通过EXIT WHEN设定退出条件;FOR循环适用于固定次数迭代,WHILE循环基于条件判断执行。有效使用循环能提高效率,但需注意避免无限循环和优化大数据处理性能。掌握循环语句,将使数据处理更加高效和便捷。
|
6天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL条件控制:数据的“红绿灯”与“分岔路”
【4月更文挑战第19天】在Oracle PL/SQL中,IF语句与CASE语句扮演着数据流程控制的关键角色。IF语句如红绿灯,依据条件决定程序执行路径;ELSE和ELSIF提供多分支逻辑。CASE语句则是分岔路,按表达式值选择执行路径。这些条件控制语句在数据验证、错误处理和业务逻辑中不可或缺,通过巧妙运用能实现高效程序逻辑,保障数据正确流转,支持企业业务发展。理解并熟练掌握这些语句的使用是成为合格数据管理员的重要一环。
|
6天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL表达式:数据的魔法公式
【4月更文挑战第19天】探索Oracle PL/SQL表达式,体验数据的魔法公式。表达式结合常量、变量、运算符和函数,用于数据运算与转换。算术运算符处理数值计算,比较运算符执行数据比较,内置函数如TO_CHAR、ROUND和SUBSTR提供多样化操作。条件表达式如CASE和NULLIF实现灵活逻辑判断。广泛应用于SQL查询和PL/SQL程序,助你驾驭数据,揭示其背后的规律与秘密,成为数据魔法师。
|
SQL Oracle 关系型数据库
Oracle SQL优化之多表连接
Oracle SQL优化之多表连接
433 0
Oracle SQL优化之多表连接
|
SQL 关系型数据库 Oracle
ORACLE SQL优化之ORA-03150&ORA-02055&ORA-02063
                                                                                                             >   
4767 0
|
SQL 存储 Oracle
Oracle SQL语句优化方法总结
  1、SQL语句尽量用大写的   因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。   2、使用表的别名   当在SQL语句中连接多个表时, 尽量使用表的别名并把别名前缀于每个列上。这样一来,   就可以减少解析的时间并减少那些由列歧义引起的语法错误。   3、选择最有效率的表名顺序(只在基于规则的优化器(RBO)中有效)
167 0
|
SQL Oracle 关系型数据库

热门文章

最新文章

推荐镜像

更多