2016-11-28 2 views
1

процессуального кодекса:PL/SQL Числовой или ошибка значение: символ преобразования номер ошибки

CREATE OR REPLACE PROCEDURE GetOrder(
p_Order IN NUMBER, 
p_OrderDate OUT DATE, 
p_CusNbr OUT NUMBER, 
p_OrderOut OUT NUMBER, 
p_Name OUT VARCHAR2, 
p_Address OUT VARCHAR2, 
p_City OUT VARCHAR2, 
p_State OUT CHAR, 
p_Zip OUT NUMBER, 
p_Itm OUT NUMBER, 
p_Desc OUT VARCHAR2, 
p_Qty OUT NUMBER, 
p_Price OUT NUMBER) 
AS 
v_OrderDate ord.ord_date%type; 
v_CusNbr ord.Cus_nbr%type; 
v_Order ord.Ord_nbr%type; 
v_Name cus.cus_nme%type; 
v_Address cus.str_adr%type; 
v_City zip.city%type; 
v_state zip.st%type; 
v_Zip zip.zip%type; 
v_Itm itm.itm_nbr%type; 
v_Desc itm.ITM_DSC%TYPE; 
v_Qty ord_itm.ord_Qty%type; 
v_Price itm.ord_itm_price%type; 
BEGIN 
SELECT O.ORD_NBR, C.CUS_NBR, O.ORD_DATE, C.CUS_NME, C.STR_ADR, Z.CITY, Z.ST, I.ITM_NBR, I.ITM_DSC, OI.ORD_QTY, I.ORD_ITM_PRICE 
     INTO 
     v_Order, v_CusNbr, v_OrderDate, v_Name, v_Address, v_Zip, v_state, v_Itm, v_Desc, v_Qty, v_Price 
FROM ITM I JOIN ORD_ITM OI ON (I.ITM_NBR = OI.ITM_NBR) 
      JOIN ORD O ON (OI.ORD_NBR = O.ORD_NBR) 
      JOIN CUS C ON (O.CUS_NBR = C.CUS_NBR) 
      JOIN ZIP Z ON (C.ZIP_ADR = Z.ZIP) 
WHERE O.ORD_NBR = p_Order; 
DBMS_OUTPUT.PUT_LINE('ILLINOIS COMPUTERS'); 
DBMS_OUTPUT.PUT_LINE('CUSTOMER ORDER FORM'); 
DBMS_OUTPUT.PUT_LINE(v_Order || v_OrderDate || v_CusNbr); 
DBMS_OUTPUT.PUT_LINE('Name: ' || v_Name); 
DBMS_OUTPUT.PUT_LINE('Address: ' || v_Address); 
DBMS_OUTPUT.PUT_LINE('City: ' || v_City || ' State : ' || v_state || ' Zip: ' || v_Zip); 
DBMS_OUTPUT.PUT_LINE('Item No.' || 'Description' || 'Quantity' || 'Price'); 
DBMS_OUTPUT.PUT_LINE(v_Itm || v_Desc || v_Qty || v_Price); 
END GetOrder; 
/

И когда я вызываю процедуру:

DECLARE 
    p_OrderNbr NUMBER := &ordernumber; 
    p_OrderDateOutput DATE; 
    p_CusNbrOutput  NUMBER; 
    p_OrderNbrOutput NUMBER; 
    p_NameOutput  cus.cus_nme%type; 
    p_AddressOutput  cus.str_adr%type; 
    p_CityOutput  zip.city%type; 
    p_StateOutput  CHAR; 
    p_ZipOutput   NUMBER; 
    p_ItmOutput   NUMBER; 
    p_DescOutput  itm.itm_dsc%type; 
    p_QtyOutput   NUMBER; 
    p_PriceOutput  NUMBER; 
begin 
    GetOrder(p_OrderNbr, 
    p_OrderDateOutput, 
    p_CusNbrOutput, 
    p_OrderNbrOutput, 
    p_NameOutput, 
    p_AddressOutput, 
    p_CityOutput, 
    p_StateOutput, 
    p_ZipOutput, 
    p_ItmOutput, 
    p_DescOutput, 
    p_QtyOutput, 
    p_PriceOutput); 
END; 
/

Я получаю

ORA-06502 error: numeric or value error: character to number conversion error.

Я считаю, что все мои параметры в порядке, поэтому я не получаю конфликтующие переменные.

Я выполнил этот запрос отдельно, чтобы убедиться, что получаю правильный вывод, и он отлично работает.

SELECT O.ORD_NBR, C.CUS_NBR, O.ORD_DATE, C.CUS_NME, C.STR_ADR, Z.CITY, Z.ST, I.ITM_NBR, I.ITM_DSC, OI.ORD_QTY, I.ORD_ITM_PRICE 
     --INTO 
     --v_Order, v_CusNbr, v_OrderDate, v_Name, v_Address, v_Zip, v_state, v_Itm, v_Desc, v_Qty, v_Price 
FROM ITM I JOIN ORD_ITM OI ON (I.ITM_NBR = OI.ITM_NBR) 
      JOIN ORD O ON (OI.ORD_NBR = O.ORD_NBR) 
      JOIN CUS C ON (O.CUS_NBR = C.CUS_NBR) 
      JOIN ZIP Z ON (C.ZIP_ADR = Z.ZIP) 
WHERE O.ORD_NBR = 100; 
+0

p_OrderNbr НОМЕР: = & порядковый номер; почему это & ​​знак? –

+0

Что вы сделали для отладки проблемы? Как правило, я бы не писал этот много кода без его запуска хотя бы один раз, я бы начал с запроса, который возвращал один столбец, подтверждал это, добавлял дополнительные столбцы, подтверждал это и т. Д., Пока не получил полный запрос. Вы можете перейти в обратном порядке и удалить несколько столбцов, пока не выясните, какой шаг выдает ошибку. Если вы можете определить, где ошибка, но все еще есть проблема с пониманием того, как ее исправить, мы, вероятно, можем быть более полезными. –

+0

FYI, ваш анонимный блок не должен быть тем, который вы на самом деле используете для вызова вашей процедуры. Вы не можете объявить переменную 'CHAR' без длины. Если вы это сделали, вы должны получить другую ошибку. –

ответ

0

Выберите список говорит

... C.STR_ADR, Z.CITY, Z.ST, ... 

В список говорит

... v_Address, v_Zip, v_state ... 

Кажется, вы получили неправильное поле в Z таблице.

Если Z.CITY не является числовым почтовым индексом?

+0

Да ... это было. Спасибо, что поймал это. – Josh

+0

@Josh - yw. Я очень доволен собой за то, что понял это, не увидев определения таблиц. – Hogan

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