• PL/SQL Developer View SQL功能的一个Bug


    很多朋友都习惯使用PL/SQL Developer图形化工具的快捷View SQL功能获取数据库中对象的创建DDL语句信息,这种方式的优点是要比使用DBMS_METADATA.GET_DDL函数方便许多,但使用View SQL功能却有着潜在的隐患,如下例:
    SQL> drop table tv;
    Table dropped.
    
    SQL> create table tv (t1 int) tablespace users parallel;
    Table created.
    
    /* 为tv表指定了parallel为DEFAULT DEGREE */
    接着在PL/SQL DEVELOPER中CTRL+左键点击TV可以进入TV对象的属性界面,点击View SQL可以看到PL/SQL DEVELOPER生成的DDL语句:
    -- Create table
    create table TV
    (
      T1 INTEGER
    )
    tablespace USERS
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );
    
    /* 可以看到PLSQL DEVELOPER生成的DDL语句未包含Parallel属性!*/
    
    /* 利用DBMS_METADATA.GET_DDL可以获取到完整的DDL语句 */
    
    SQL> set serveroutput on;
    
    SQL> declare
      res varchar2(500);
    begin
      res := dbms_metadata.get_ddl(object_type => 'TABLE',
                                   name        => 'TV',
                                   schema      => 'SYS');
      dbms_output.put_line(res);
    end;
    /
    
    CREATE TABLE "SYS"."TV"
    ("T1" NUMBER(*,0))
    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
    TABLESPACE "USERS"
    PARALLEL 
    
    /* 不仅于parallel属性,在PL/SQL Developer Version 8.0.0.1480中生成的建表DDL语句也不包含NOLOGGING属性 */
    
    SQL> alter table tv nologging;
    Table altered.
    
    /*View SQL功能生成的DDL语句 */
    -- Create table
    create table TV
    (
      T1 INTEGER
    )
    tablespace USERS
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      )
    compress;
    
    /* 使用DBMS_METADATA.GET_DDL可以正确表达NOLOGGING属性 */
    
      CREATE TABLE "SYS"."TV"
       (	"T1" NUMBER(*,0)
       ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 COMPRESS NOLOGGING
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
      TABLESPACE "USERS"
      PARALLEL
    不过幸运的是PLSQL DEVELOPER工具也包含了DBMS_METADATA->DDL选项可以调用该函数返回准确的DDL语句:
  • 相关阅读:
    如何做一个按钮二个事件
    JavaScript中onmouseover时如何让鼠标指针变成一个小手状
    英语口语整理,灵活运用了,口语基本就没问题了
    javascript 传递 '' 时出错 换成 '&' ok
    一个按钮触发两个事件可以吗?
    Select中DISTINCT关键字的用法?
    使下拉框某项不可选的方法
    新打开窗口属性 a href
    调试和测试 Swing 代码
    打造专业外观九宫图
  • 原文地址:https://www.cnblogs.com/macleanoracle/p/2967560.html
Copyright © 2020-2023  润新知