-1
create table Department
(Dname varchar(255) NOT NULL, Dnumber int NOT NULL PRIMARY KEY, Mgr_SSN char(9) NOT NULL, Mgr_start_Date DATE);

insert into Department values('HR', '1', '11001', '2012-04-05 10:15:00');

エラーが発生しています"not valid month"
テーブルを作成するときに日付形式を定義する必要がありますか?
を使用してOracle11gいます。

4

1 に答える 1

1

列がある場合は、ではなくDATE常に を挿入する必要があります。文字列を正しく変換するために暗黙的なキャストに依存することは悪い考えです。異なるセッションで異なる NLS 設定を使用することは非常に簡単であり、したがって、暗黙的な変換を異なる方法で実行することは非常に簡単です (結果が異なるかエラーになります)。これを行う最も簡単な方法は、関数を使用することです。DATEVARCHAR2DATEto_date

insert into Department( dname, 
                        dnumber,
                        mgr_ssn,
                        mgr_start_date )
  values('HR', 
         1, 
         '11001', 
         to_date( '2012-04-05 10:15:00', 'yyyy-mm-dd hh24:mi:ss') );

また、列をリストするようにステートメントを変更しました。これは、テーブル内の列の物理的な順序を毎回検索する必要がなくなり、INSERTステートメントが将来的に機能するようになるため、一般的には良い方法です。テーブルに新しい列を追加します。dnumberは であるため、文字列を挿入するのではなく、数値を挿入するようにステートメントをNUMBER変更しましたINSERT(繰り返しますが、必要がない場合は暗黙的な変換に依存しないでください)。CHAR(9)5 文字の文字列を挿入する社会保障番号を表す列があるという明らかなバグは修正しませんでした。

于 2013-06-20T09:43:48.240 に答える