2016-03-06 2 views
0

Относительно новый для pl/sql, и я пытаюсь понять способ использования sequence.NEXTVAL в моем цикле. Когда я запускаю то, что у меня есть, я получаю «ORA-01722: недопустимый номер». Где-то я не хватает?SQL Вставка значений sequence.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' в 'Sales' является VARCHAR2 (17). Вы уверены, что все значения для VIN могут быть преобразованы в NUMBER (5)? то есть нет символов?

+0

Отличный улов! ... –

+0

@Ashraf Спасибо. Нет VIN не может быть преобразован в NUMBER, потому что буквенно-цифровое соединение. Я изменю это и посмотрю, делает ли это трюк. – jcup505

Смежные вопросы