我想創建一個如果然後在我的PL SQL代碼,但下面的錯誤接收。我目前使用的代碼來創建一個自動序列,但當我嘗試插入下面的結果是錯誤的,因爲O_ID是Orders中的一個整數。我怎樣才能申報序列錯誤,如果然後過程
set serveroutput ON;
DECLARE
O_ID orders.o_id%type;
Order_Date orders.order_date%type;
Shipment_Date orders.shipment_date%type;
Delivery_Date orders.delivery_date%type;
Shipping_Method orders.Shipping_Method%type;
Shipping_days shipping.shipping_days%type;
Delivery_days shipping.delivery_days%type;
Regular number := 3;
Express_shipping number := 2;
Begin
O_ID := 'orders_seq.NEXTVAL';
Order_Date := SYSDATE;
Shipment_Date := SYSDATE;
Delivery_Date := SYSDATE;
Shipping_Method := 'Regular';
Shipping_days := 3;
Delivery_days := 5;
IF Shipping_Method = Regular THEN
Shipping_Days := 3;
Delivery_days := 5;
ELSIF Shipping_Method = Express_shipping THEN
Shipping_Days := 1;
Delivery_days := 2;
END IF;
Insert into Orders(O_ID,Order_Date,Shipping_method,Shipment_date,Delivery_date,Shipping_method)
Values(O_ID,Order_Date,O_ID,Order_Date,Shipping_method,Shipment_date,Delivery_date,Shipping_method);
COMMIT;
dbms_output.put_line('Order ID: ' || O_ID);
END;
錯誤:
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 26
似乎有點奇怪擁有的if/else反正當你賦值「正規軍」爲'Shipping_Method';但它不能與任何一個數字變量進行比較。你真的是指兩個字符串分配(即OID的序列)是字符串文字嗎? –
我想能夠使用if then else語句,而不必聲明變量。如果我使用字符串,那麼希望我不需要聲明。 – LivinLife
不確定你的意思是不聲明一個字符串; isn; t'O_ID'假設是序列中的數字,而不是包含序列名稱的字符串文字?你正在比較的值從哪裏來 - 這將成爲一個存儲過程,他們將被傳入?添加訂單表的定義可能也會有所幫助,以澄清您所期望的數據類型。 –