2016-03-06 114 views
0

相對較新的PL/SQL,我試圖找到一種方法來利用我的循環sequence.NEXTVAL。當我運行我現在所擁有的,我得到「ORA-01722:無效號碼」有沒有什麼時候我失蹤了?SQL插入值序列.NEXTVAL

DECLARE 
    CURSOR SALESDATA 
    IS 
    SELECT vin, 
      sale_date, 
      SF.plan_ID, 
      SP.salepersons_ID, 
      COUNT (*) AS Vehicles_Sold, 
      SUM (S.gross_sales_price) AS Gross_Sales_Amt 
    FROM sales S, sales_financing SF, salepersons SP 
    WHERE S.sale_ID = SF.sale_ID AND S.salepersons_ID = SP.salepersons_ID 
    GROUP BY vin, 
      sale_date, 
      SF.plan_ID, 
      SP.salepersons_ID 
    HAVING COUNT (*) > 0; 
    BEGIN 
    FOR VEHICLE_REC IN SALESDATA 
    LOOP 
     INSERT INTO sale_facts (sale_fact_ID, 
           sale_day, 
           vehicle_code, 
           plan_code, 
           dealer_ID, 
           vehicle_sold, 
           gross_sales_amt) 
      VALUES (salefactID_seq.NEXTVAL, 
        vehicle_rec.sale_date, 
        vehicle_rec.vin, 
        vehicle_rec.plan_id, 
        vehicle_rec.salepersons_ID, 
        vehicle_rec.vehicles_sold, 
        vehicle_rec.gross_sales_amt); 

    COMMIT; 
    END LOOP; 

    COMMIT; 
    END; 
/

這是表格的結構。

SQL> DESC sales 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
SALE_ID         NOT NULL NUMBER(10) 
VIN            VARCHAR2(17) 
CUST_ID           NUMBER(10) 
GROSS_SALES_PRICE       NOT NULL NUMBER(10) 
MILEAGE         NOT NULL VARCHAR2(10 CHAR) 
SALE_DATE         NOT NULL DATE 
VEHICLE_STATUS       NOT NULL VARCHAR2(25 CHAR) 
SALEPERSONS_ID          NUMBER(10) 

SQL> DESC salepersons 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
SALEPERSONS_ID       NOT NULL NUMBER(10) 
TITLE          NOT NULL VARCHAR2(25 CHAR) 
NAME          NOT NULL VARCHAR2(50 CHAR) 
HIRE_DATE         NOT NULL DATE 

SQL> DESC sales_financing 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
SALE_ID           NUMBER(10) 
PLAN_ID           NUMBER(10) 
DOWN_PAY         NOT NULL FLOAT(10) 
LOAN_TERM         NOT NULL NUMBER(3) 

SQL> DESC sale_facts 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
SALE_FACT_ID        NOT NULL NUMBER(5) 
SALE_DAY         NOT NULL DATE 
VEHICLE_CODE        NOT NULL NUMBER(5) 
PLAN_CODE         NOT NULL NUMBER(10) 
DEALER_ID         NOT NULL NUMBER(10) 
VEHICLE_SOLD        NOT NULL NUMBER(10) 
GROSS_SALES_AMT       NOT NULL NUMBER(15) 
+0

我覺得問題可能與序列無關,但另一個字段試圖隱式地將varchar值轉換爲數字並失敗,您是否介意發佈相關表的表結構? –

+0

@AshrafIqbal添加了表格結構。謝謝你的幫助。 – jcup505

回答

1

你的 'vehicle_code' 在 'sale_facts' 是NUMBER(5),而在 '銷售' VIN'是VARCHAR2(17)。您確定VIN的所有值都可以轉換爲NUMBER(5)嗎?即那裏沒有人物?

+0

太棒了!... –

+0

@Ashraf謝謝。不能將VIN轉換爲NUMBER,因爲字母數字混合。我會改變這一點,看看是否有這個訣竅。 – jcup505