2017-11-29 3 views
0

は、私は私のテーブルに値を挿入しようとしていますが、私はエラーERROR(ORA-01858:数値が期待されていたところ、数値以外の文字が発見された)

ORA-01858: a non-numeric character was found where a numeric was expected 
を得続けます

INSERT INTO PRODUCT_DIM_HIS 
(PRODUCTKEY, PRODUCTID, PRODUCTDESCRIPTION, PRODUCTLINEID, PRODUCTLINENAME, EFF_START_DATE, EFF_END_DATE) 
SELECT PRODUCT_KEY_SEQ.NEXTVAL, nvl(to_char(p.PRODUCTID), 'Undefined'), nvl(to_char(p.PRODUCTDESCRIPTION), 'Undefined'), 
nvl(to_char(p.PRODUCTLINEID), 'Undefined'), nvl(to_char(pl.PRODUCTLINENAME), 'Undefined'), 
nvl(to_date(o.ORDERDATE), 'Undefined'), nvl(to_date(o.FULFILLMENTDATE), 'Undefined') 
FROM PRODUCTLINE_T pl, PRODUCT_T p, ORDER_T o, ORDERLINE_T ol 
WHERE p.PRODUCTLINEID = pl.PRODUCTLINEID 
AND o.ORDERID = ol.ORDERID 
AND ol.PRODUCTID = p.PRODUCTID; 

PRODUCT_DIM_HISのCODE 要求

CREATE TABLE PRODUCT_DIM_HIS 
(
    PRODUCTKEY integer NOT NULL, 
    PRODUCTID integer, 
    PRODUCTDESCRIPTION VARCHAR2(50 BYTE), 
    PRODUCTLINEID integer, 
    PRODUCTLINENAME VARCHAR2(50 BYTE), 
    EFF_START_DATE DATE, 
    EFF_END_DATE DATE, 
    CONSTRAINT PRODUCT_DIM_HIS_PK PRIMARY KEY (PRODUCTKEY) 
); 

これは私のコードです

ORDERDATEとORDER_TのFULLFILlMENTDATEにDATEデータ型があるため、問題の原因を理解できません。

@BOB_JARVIS

CREATE TABLE PRODUCT_DIM 
(
    PRODUCTKEY integer NOT NULL, 
    PRODUCTID integer, 
    PRODUCTDESCRIPTION VARCHAR2(50 BYTE), 
    PRODUCTLINEID integer, 
    PRODUCTLINENAME VARCHAR2(50 BYTE), 
    CONSTRAINT PRODUCT_DIM_PK PRIMARY KEY (PRODUCTKEY) 
); 

INSERT INTO PRODUCT_DIM 
(PRODUCTKEY, PRODUCTID, PRODUCTDESCRIPTION, PRODUCTLINEID, PRODUCTLINENAME) 
SELECT PRODUCT_KEY_SEQ.NEXTVAL, nvl(to_char(p.PRODUCTID), 'Undefined'), nvl(to_char(p.PRODUCTDESCRIPTION), 'Undefined'), 
nvl(to_char(p.PRODUCTLINEID), 'Undefined'), nvl(to_char(pl.PRODUCTLINENAME), 'Undefined') 
FROM PRODUCTLINE_T pl, PRODUCT_T p 
WHERE p.PRODUCTLINEID = pl.PRODUCTLINEID; 

INSERT INTO PRODUCT_DIM 
(PRODUCTKEY, PRODUCTID, PRODUCTDESCRIPTION, PRODUCTLINEID, PRODUCTLINENAME) 
VALUES (PRODUCT_KEY_SEQ.NEXTVAL, -99, 'Undefined', -99, 'Undefined'); 
+0

何ですか? –

+0

日付のうちの1つがnullで、 'nvl()'によって 'Undefined'に置き換えられていると思います。このタイプのエラーは非常に簡単にデバッグできます。実際に送信しようとしている値をデータベースに公開してください。 – Khyron

+0

@BobJarvis私はそれを – pyuntae

答えて

0

)((NVLを削除)だけTO_DATEを残す:

をしたがって、PRODUCT_DIM_HIS上の他のフィールドのデータ型は

INSERT INTO PRODUCT_DIM_HIS 
(PRODUCTKEY, PRODUCTID, PRODUCTDESCRIPTION, PRODUCTLINEID, PRODUCTLINENAME, EFF_START_DATE, EFF_END_DATE) 
SELECT PRODUCT_KEY_SEQ.NEXTVAL, nvl(to_char(p.PRODUCTID), 'Undefined'), nvl(to_char(p.PRODUCTDESCRIPTION), 'Undefined'), 
nvl(to_char(p.PRODUCTLINEID), 'Undefined'), nvl(to_char(pl.PRODUCTLINENAME), 'Undefined'), 
to_date(o.ORDERDATE), to_date(o.FULFILLMENTDATE) 
FROM PRODUCTLINE_T pl, PRODUCT_T p, ORDER_T o, ORDERLINE_T ol 
WHERE p.PRODUCTLINEID = pl.PRODUCTLINEID 
AND o.ORDERID = ol.ORDERID 
AND ol.PRODUCTID = p.PRODUCTID; 
関連する問題