【问题标题】:Perl + oracle dbaPerl + oracle 数据库
【发布时间】:2013-01-14 18:37:12
【问题描述】:

我是 perl 的新手,并试图列出昨天创建的所有 oracle 模式表,即 (sysdate - 1)

试图通过 perl 脚本实现上述目标并针对 oracle 数据库运行。

问: 1.使用perl脚本列出所有最近创建的oracle表 2. 结果中的列(Schema、table_name、created datetime) 3. 仅在创建任何新表或没有通过调度程序发送电子邮件时才提供输出

例如

select schema, table_name, created
from dba_objects
where created = sysdate - 1
and object_type = 'TABLE';

【问题讨论】:

  • 不是schema,应该是ownerobject_name而不是table_name

标签: oracle perl database-administration


【解决方案1】:

根据定义,Oracle 中的date 既包括日期部分,也包括到秒的时间。即使您会话的NLS_DATE_FORMAT 仅指定您要显示日期组件,时间仍然存在。时间几乎肯定会导致您的查询不返回任何行。 sysdate - 1 正好在 24 小时前返回。因此,如果今天是 2013 年 1 月 14 日 13:41:35,sysdate - 1 将返回 2013 年 1 月 13 日 13:41:35。您的查询将只返回在那一秒创建的表。

trunc(sysdate) 今天午夜返回,trunc(sysdate - 1) 昨天午夜返回。所以,很可能,你想要类似的东西

SELECT owner, object_name
  FROM dba_objects
 WHERE created >= trunc(sysdate - 1)
   AND created < trunc(sysdate)
   AND object_type = 'TABLE'

由于dba_objects 没有schematable_name 列,我假设您的意思是ownerobject_name

【讨论】:

  • 感谢 justin 的快速响应...是的,您假设所有者和 object_name 是正确的,这总是通过查询欺骗我,所以在我在 dba_objects 上编写 sql 之前必须执行 desc。我的问题是创建 perl 脚本,因为不知道从哪里开始。正在努力……
猜你喜欢
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
相关资源
最近更新 更多