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语句:



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

相关文章
|
1月前
|
SQL 运维 程序员
一个功能丰富的SQL审核查询平台
一个功能丰富的SQL审核查询平台
|
2月前
|
SQL 流计算
Flink SQL 在快手实践问题之Window TVF改进窗口聚合功能如何解决
Flink SQL 在快手实践问题之Window TVF改进窗口聚合功能如何解决
23 1
|
2月前
|
SQL 存储 OLAP
OneSQL OLAP实践问题之Flink SQL Gateway的功能如何解决
OneSQL OLAP实践问题之Flink SQL Gateway的功能如何解决
33 1
|
2月前
|
SQL Oracle 关系型数据库
SQL与PL/SQL:数据库编程语言的比较
【8月更文挑战第31天】
50 0
|
2月前
|
SQL 数据处理 数据库
SQL正则表达式应用:文本数据处理的强大工具——深入探讨数据验证、模式搜索、字符替换等核心功能及性能优化和兼容性问题
【8月更文挑战第31天】SQL正则表达式是数据库管理和应用开发中处理文本数据的强大工具,支持数据验证、模式搜索和字符替换等功能。本文通过问答形式介绍了其基本概念、使用方法及注意事项,帮助读者掌握这一重要技能,提升文本数据处理效率。尽管功能强大,但在不同数据库系统中可能存在兼容性问题,需谨慎使用以优化性能。
44 0
|
3月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
2月前
|
SQL 数据库 UED
SQL查询功能的全面解析与实用技巧
SQL(Structured Query Language)作为数据库管理的核心语言,其查询功能是实现数据检索、分析和报告的关键
|
2月前
|
SQL 存储 数据管理
解锁 SQL Server 2022的时间序列数据功能
【8月更文挑战第14天】解锁SQL Server 2022的时间序列数据功能需先确认版本支持;接着创建数据库与含时间列的表,如`TimeSeriesData`;然后插入时间序列数据;利用内置函数如窗口函数计算移动平均等统计;最后针对大数据量配置索引及分区以优化性能。这流程助力高效处理时间序列数据。
|
3月前
|
SQL 自然语言处理 网络协议
【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)
TCP(Transmission Control Protocol)连接是互联网上最常用的一种面向连接、可靠的、基于字节流的传输层通信协议。建立TCP连接需要经过著名的“三次握手”过程: 1. SYN(同步序列编号):客户端发送一个SYN包给服务器,并进入SYN_SEND状态,等待服务器确认。 2. SYN-ACK:服务器收到SYN包后,回应一个SYN-ACK(SYN+ACKnowledgment)包,告诉客户端其接收到了请求,并同意建立连接,此时服务器进入SYN_RECV状态。 3. ACK(确认字符):客户端收到服务器的SYN-ACK包后,发送一个ACK包给服务器,确认收到了服务器的确
182 1
|
3月前
|
存储 分布式计算 资源调度
ODPS SQL问题之ODPS逻辑层包含哪些角色,它们各自的功能是什么
ODPS SQL 问题之ODPS逻辑层包含哪些角色,它们各自的功能是什么