0

私はperlの初心者で、昨日作成されたすべてのOracleスキーマテーブルをリストしようとしています(sysdate - 1)

perlスクリプトを介して上記を達成し、Oracleデータベースに対して実行しようとしています。

Q: 1. Perl スクリプトを使用して最近作成されたすべてのオラクル テーブルを一覧表示します 2. 結果の列 (スキーマ、テーブル名、作成日時) 3. 新しいテーブルが作成された場合にのみ出力を提供するか、スケジューラ経由で電子メールを送信しません

例えば

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

1 に答える 1

0

Oracleの Adateには、定義により、日の構成要素と秒までの時間の両方が含まれます。セッションNLS_DATE_FORMATで日のコンポーネントを表示するように指定されている場合でも、時間はそのままです。そして、その時間が原因でクエリが行を返さないことはほぼ確実です。sysdate - 1ちょうど 24 時間前に戻ります。したがって、今日が 2013 年 1 月 14 日 13:41:35 の場合、sysdate - 12013 年 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_nameownerobject_name

于 2013-01-14T18:45:52.790 に答える