sysdateの使い方

このQ&Aのポイント
  • sysdateを使用して、処理日を表示させる方法について解説します。
  • TransLogテーブルの処理日に今日の日付を表示するためにsysdateを使用しますが、エラーが発生しています。
  • 実行時に'ORA-00907: missing right parenthesis'というエラーが表示される場合は、to_char関数の後ろ括弧の終了位置を確認してください。
回答を見る
  • ベストアンサー

sysdateの使い方

TransLogという、すべての処理のログを残す処理を行うテーブルがあります。 ログの入ってきた処理日を今日の日付(sysdate)で表示させるようにしたいのですがうまくいきません。 どうか、ご教授お願いします。 create table TransLog( TransType varchar2(15), TransDate to_char (sysdate, 'DD-MON-YY'), TransTime to_char (sysdate, 'HH:MI:SS'), TransInfo varchar2(35), TransResult varchar2(5), primary key (TransType) ); これで実行すると、to_charのあとに'ORA-00907: missing right parenthesis'というエラーがでます。

  • Oracle
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは。 「DEFAULT」が必要です。 TransDate varchar2(10) default to_char(sysdate, 'DD-MON-YY'), ですね。 (^^ゞ

pooh_bear
質問者

お礼

あっ!なるほど。defaultとして指定しちゃうんですね。助かりました。ありがとうございます!

その他の回答 (1)

回答No.1

こんにちは。 カラム名 型(VARCHAR2(10)とか) デフォルト値(ここにTO_CHAR()・・・) じゃないでしょうか・・・。 自信ないですけど・・・。 (^^ゞ

pooh_bear
質問者

お礼

言われたとおりにやってみました。 create table TransLog( TransType varchar2(15), TransDate varchar2(10) to_char(sysdate, 'DD-MON-YY'), TransTime varchar2(10) to_char(sysdate, 'HH:MI:SS'), TransInfo varchar2(35), TransResult varchar2(5), primary key (TransType) ); こんな感じになりました。 すると前回のエラーは出なくなったのですが、あらたに、 create table TransLog(             * ORA-00922: missing or invalid option こういうものがでるようになってしまいました。 何が足りないorおかしいのでしょうか。。。。

関連するQ&A

  • 日付をVARCHAR2型でYYYYMMDDと表示したい

    DATE型(YYYY/MM/DD HH24:MI:SS)の値を取り出し、 VARCHAR2(8)型の文字列YYYYMMDDにしたいと思っています。 TO_CHAR(DATE型,'YYYYMMDD')としても、YY-MM-DDと表示されてしまいます。 YYYYMMDDと文字型で表示させるにはどうすればよいのでしょうか。 宜しくお願い致します。

  • PL SQL のループ

    あるセレクト文のパフォーマンスを測定するためにループで複数回実行し時間を測定したいのですが、select 変数 into をしないとコンパイルできず実行できません。 同じセレクト文を複数回実行し時間を測定するのに良い方法は無いでしょうか? CREATE OR REPLACE PROCEDURE test IS BEGIN DBMS_OUTPUT.PUT_LINE(TO_CHAR(sysdate(),'YYYY/MM/DD HH24:MI:SS')); FOR i IN 1..100 LOOP SELECT a,b,c,d,e FROM tbl; END LOOP; DBMS_OUTPUT.PUT_LINE(TO_CHAR(sysdate(),'YYYY/MM/DD HH24:MI:SS')); END;

  • log4jが連続して同じログを

    JSFにて、log4jでログファイルにログ出力を行っているのですが、一回のログ出力メソッド呼び出しで、同じログが2~8行出力されてしまいます。 例) yy/MM/dd HH:mm:ss.853, WARN , .... yy/MM/dd HH:mm:ss.853, WARN , .... yy/MM/dd HH:mm:ss.853, WARN , .... yy/MM/dd HH:mm:ss.853, WARN , .... yy/MM/dd HH:mm:ss.853, WARN , .... yy/MM/dd HH:mm:ss.853, WARN , .... yy/MM/dd HH:mm:ss.853, WARN , .... yy/MM/dd HH:mm:ss.853, WARN , .... ミリ秒単位で同じなので、一回出力されれば十分なのですが、複数行出力されています。 短時間で、かなりのサイズになってしまうため、困惑しております。 この事象の解決方法をご存じの方、解決方法をご教示願います。

  • 【PL/SQL】DATE型の時刻の表示と非表示

    PL/SQLでのDATE型の取扱いについて教えてください。 初期化パラメータNLS_DATE_FORMATが'YY-MM-DD'で、 ある列を'YYYY/MM/DD HH24:MI:SS'形式でDBにINSERTしたい場合、 dtWorkEndDate := to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS'); としてINSERTにdtWorkEndDateを用いると、 YY-MM-DD形式でDBに登録されてしまいます。 (dtWorkEndDateはDATE型。) ORACLEの設定かPL/SQLの問題なのかわからないのですが、 なにかアドバイスを頂けないでしょうか。 よろしくお願いします。

  • 基本的なことですが;

    DATE型の変数を定義し現在の日付時刻を代入しYYYY/MM/DD:HH24:MI:SSフォーマットで 画面表示しろという 問題を与えられました。 select sysdate from dual; declare today date; today_ki date; begin select to_char (sysdate, 'yyyy/mm/dd') into today from dual; select to_char (sysdate, 'hh24:mi:ss') into today_ki from dual; dbms_output.put_line( today || ', ' || today_ki); end; / という風に作ってみたのですが うまくいきません。 どうかご教授ください><

  • PL/SQLでのTO_DATEの時間取得について

    お世話になります。 PL/SQLでDATE型のデータの日時を取得する方法を教えてください。 PL/SQLでDBの値を、TO_CHARで取ってきて、その値をTO_DATEすると、時刻が落ちてしまいます。 charWorkEndDate VARCHAR2(20); dtWorkEndDate DATE; charWorkEndDate := to_char(V00061_Rec.S_DATE5, 'YYYY/MM/DD HH24:MI:SS'); dtWorkEndDate := to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS'); 出力結果 --charWorkEndDate- [2005/12/25 06:00:19] --dtWorkEndDate- [05-12-25] to_dateの1つ目の引数にシングルクォーテーションが必要かと思い、 dtWorkEndDate := to_date('''||charWorkEndDate||''', 'YYYY/MM/DD HH24:MI:SS'); としてみたのですが、その場合、「ORA-01841: (周)年は-4713と+9999の間の0以外の数を指定する必要があります」とのエラーが出てしまいます。 どなたかDATE型のデータの時刻を取る方法をご存知でしたら、教えていただけますでしょうか。 よろしくお願いします。

  • SQL*Loader  フォーマット変換について

    SQL*Loaderの制御ファイル内で、 以下のような日付データを変換するにはどうしたらよいでしょうか? ・2010-12-06 00:00:00.000 以前は'2010-12-06 00:00:00'の形式だったので "to_char(to_date(:DENPYO_DATE,'YYYY-MM-DD HH24:MI:SS'),'YYYYMMDD')" のようにして変換が可能だったのですが、仕様変更がありましてこれに対応しなければいけなくなりました。 ちなみに安易な考えで以下のようにしたのですがさすがにだめでした... "to_char(to_date(:DENPYO_DATE,'YYYY-MM-DD HH24:MI:SS.000'),'YYYYMMDD')" 方法をご存知の方がいれば是非、ご教示いただきたく存じます。 よろしくお願いいたします。

  • 時間の抽出条件

    業務で開発中、どうしてもわからなかったので質問させていただきます。 あるテーブルから「データを抽出する日の14時までにできたデータのみを抽出する」というSQLですが、 データを抽出する日→SYSDATEでYYYYMMDDまでを取得する考えです。 このあとの14:00:00という条件をつけるSQLの書き方がわかりません。 このような書き方ではだめでしょうか? SELECT * FROM T_TEST WHERE DATAYMD < TO_CHAR(SYSDATE '14:00:00','YYYYMMDD HH24:MI:SS'); DATAYMDはCHAR型で8バイトで入っています。 よろしくお願いいたします。

  • PostgreSqlのinterval型のフォーマ

    PostgreSqlのinterval型の項目に"1 day 05:19:00"という値が入っています。 これを29:19という時分で、 もしくは時を単独で29(時間)という数値に変換する方法を教えてください SELECT item1 -- "1 day 05:19:00" , to_char(item1,'HH:MI') -- "05:19" , to_char(item1,'HH24:MI') -- "05:19" , to_char(item1,'HH') -- "05" , to_char(item1,'MI') -- "19" FROM (select '1 day 05:19:00'::interval AS item1) query1

  • 漢字名のテーブルとカラムのCREATE TABLEについて

    Oracle9iで以下のCREATE文を実行しようと思っています。 漢字名のテーブルで、漢字名のカラムのあるCREATE文です。 SQL> CREATE TABLE "TAB_あいう"( 2 "かきコード" varchar2(5) NOT NULL , 3 "くけ開始月" varchar2(2) NOT NULL , 4 "フラグ" char(1) NOT NULL , 5 "さCD" char(6) NOT NULL , 6 "日時" date NOT NULL , 7 canstraint PK_FISCALTERM primary key ("かきコード")); canstraint PK_FISCALTERM primary key ("かきコード"))                            * 行7でエラーが発生しました。: ORA-00907: 右カッコがありません。 しかし、 ORA=00907;右カッコがありません。といわれてしまいます。 見た目、右かっこはあります。 なにか、お作法的なものがあるのでしょうか?