2016-09-30 17 views
0

私はクイック検索を行いましたが、このエラーは文字列でなければならない数値をロードしようとした結果であると言われていますか?私はアルファベットはありません。私は後ですべての列の最小値/最大値/平均値を求めるので、それらを文字列にする必要があります。Oracle SQL:挿入に失敗しましたORA-01722:無効な数値です。データは数値ではない文字列です。なぜ失敗しましたか?

エラー:列のための

--Insert failed for rows 1 through 50
--ORA-01722: invalid number

1 row of 23 columns of data (0's included):

25:33.5 - - - - - - -1.23 6.56 6.93 0 - - - - - 998.26 - - - - - - - 183.2 2.35 - 840 - - - - - - 1.56 -1.56 0 - - 0 - - - - - - - - 0 84.2 - 47.97 - - - - - - - - - - - - 0.81 0.48 - - - - - 0 11.37 4.5 -10.05 - - 13.3

INSERT INTO CAR_LOGS (DEVICE_TIME, GX, GY, GZ, G_CALIBRATE, BAROMETER, ENGINE_COOL, ENGINE_LOAD, ENGINE_RPM, FUEL_TRIM_BANK1_LONG, FUEL_TRIM_BANK1_SENSOR1, FUEL_TRIM_BANK1_SENSOR2, FUEL_TRIM_BANK1_SHORT, GPS_VS_OBD_SPEED_DIFF, AIR_INTAKE_TEMP, MASS_AIR_FLOW_RATE, O2_VOLTS_BANK1_SENSOR1, O2_VOLTS_BANK1_SENSOR2, SPEED, THROTTLE_POSITION, TIMING_ADVANCE, TURBO_BOOST_VACUUM_GUAGE, VOLTAGE) 
VALUES (27-Sep-2016 19:25:33.467,-1.23,6.56,6.93,-0.0,998.26,183.2,2.35,840.0,1.56,-1.56,0.0,0.0,0.0,84.2,47.97,0.81,0.48,0.0,11.37,4.5,-10.05,13.3); 

私は、このファイル内のデータの8kの行のように持って、それはそれらのすべてに、もちろん失敗しています。私はかなり新しいSQLです。私の父はdbの専門家です、私はちょうど学校/ dbの側でプログラミングを学んでいます。 Oracle SQLを使用して、csvファイルを表に直接インポートして列を正しく選択しようとしました。

また、私は20のファイルを持っています...ルーキーのためのアドバイスは、それらをすべて同じ方法でロードする方法についてですか?

私が見つかりました:

LOAD 
    DATA 
cd path 
cat file*.csv > all_files.csv 
    APPEND INTO TABLE TBL_DATA_FILE 
    EVALUATE CHECK_CONSTRAINTS 
    REENABLE DISABLED_CONSTRAINTS 
    EXCEPTIONS EXCEPTION_TABLE 
    FIELDS TERMINATED BY "," 
    OPTIONALLY ENCLOSED BY '"' 
    TRAILING NULLCOLS 
    ( 
    COL0, 
    COL1, 
    COL2, 
    COL3, 
    COL4 
); 

私は

C:\Users\c_thu\Desktop\Database\CarLogsSEPT.2016

またはワード・パスの後にそれを直接接続して、パスを置き換えますか?

2つの質問がありますが、私は本当にこのエラーを理解したいだけです。 2番目の質問は私です。

答えて

0

singlequotesなしで時間を入れていることが問題です。以下を試してください。

INSERT INTO CAR_LOGS (DEVICE_TIME, 
         GX, 
         GY, 
         GZ, 
         G_CALIBRATE, 
         BAROMETER, 
         ENGINE_COOL, 
         ENGINE_LOAD, 
         ENGINE_RPM, 
         FUEL_TRIM_BANK1_LONG, 
         FUEL_TRIM_BANK1_SENSOR1, 
         FUEL_TRIM_BANK1_SENSOR2, 
         FUEL_TRIM_BANK1_SHORT, 
         GPS_VS_OBD_SPEED_DIFF, 
         AIR_INTAKE_TEMP, 
         MASS_AIR_FLOW_RATE, 
         O2_VOLTS_BANK1_SENSOR1, 
         O2_VOLTS_BANK1_SENSOR2, 
         SPEED, 
         THROTTLE_POSITION, 
         TIMING_ADVANCE, 
         TURBO_BOOST_VACUUM_GUAGE, 
         VOLTAGE) 
     VALUES (
        TO_TIMESTAMP ('27-Sep-2016 19:25:33.467', 
           'dd-mon-yyyy HH24:MI:SS.FF'), 
        -1.23, 
        6.56, 
        6.93, 
        -0.0, 
        998.26, 
        183.2, 
        2.35, 
        840.0, 
        1.56, 
        -1.56, 
        0.0, 
        0.0, 
        0.0, 
        84.2, 
        47.97, 
        0.81, 
        0.48, 
        0.0, 
        11.37, 
        4.5, 
        -10.05, 
        13.3); 

クイックデモ:

CREATE TABLE CAR_LOGS 
(
    DEVICE_TIME TIMESTAMP, --datatype of column has to be timestamp to show milliseconds 
    GX   NUMBER, 
    GY   NUMBER, 
    GZ   NUMBER 
); 

レコードの挿入;

INSERT INTO CAR_LOGS (DEVICE_TIME, 
         GX, 
         GY, 
         GZ) 
     VALUES (
        TO_TIMESTAMP ('27-Sep-2016 19:25:33.467', 
           'dd-mon-yyyy HH24:MI:SS.FF'), 
        -1.23, 
        6.56, 
        6.93); 
+0

非常に感謝しています! – Chase

+0

私はあまりにも早く話したと思います。コードを書いていなかったので、テーブルを右クリックしてインポートGUI上の「選択した列を追加」をクリックしていました。私はコードのコピーではなく、エラーの印刷物を貼り付けました。私は、提供されたソリューションを実行した後も同じエラーが発生します。 – Chase

+0

テーブルの列のデータ型を確認します。すべての列がvarcharかnumberかです。すべての列がvarcharの場合、すべての図形を一重引用符で囲みます。また、このような挿入を許可するには、DEVICE_TIME列もデータ型dateでなければなりません。チェックアウト。 – XING

0

このエラーは数値に変換できない数値の列の値に挿入しようとしていることを意味します。あなたはテーブルの説明を提供していただけますか? ちょうど12月27-Sep-19:25:33.467を送信するのではなく、日付を挿入する場合は、 to_date('27-Sep-2016 19:25:33.467','dd-mon-yyyy hh24:mi:ss') を使用してください。 to_date関数でフォーマットを指定しないで日付を挿入しないでください。 NLS_DATE_FORMATパラメータは、現在のセッション中の日付の形式を指定します。しかし、このパラメータはセッションに依存しますので、to_dateを使用しないと、コードは他のクライアントでは動作しません。

+0

実行してください: desc CAR_LOGS; と結果を投稿してください。 – Kacper

関連する問題