процедура создана точно, но время выполнения получает ошибку, указанную в заголовке.
DECLARE
var NUMBER;
var1 NUMBER;
BEGIN
sale_procedure(outletid => 809,itemcod => 128169,start_date => '2018-1-1',end_date => '2019-1-1'
,amount => var,quantity => var1);
dbms_output.enable;
dbms_output.put_line(var);
End;
/
Похоже, что даты, переданные в качестве входного параметра (START_Date, END_DATE), должны иметь тип данных «Дата» или использовать строковый формат в соответствии с настройкой NLS_DATE_FORMAT. Строка может использоваться непосредственно вместо дат, если они соответствуют настройке NLS.
Лучше использовать функцию to_date или дату ''.
пример: to_date('01-01-2019','дд-мм-рррр')
Пожалуйста, отредактируйте свой ответ, чтобы улучшить его, а не использовать раздел комментариев. Должна быть возможность удалить комментарий без потери информации. В частности, код трудно читать как комментарий из-за плохой компоновки и отсутствия форматирования.
Кроме того, элемент маски даты RR, который Oracle представил как кладж для ошибки Y2K еще в конце девяностых. Не должно быть никаких оправданий для его использования в 2019 году. Действительно, это красный флаг, поскольку он, вероятно, маскирует повреждение данных.
передайте DATE
литерал, то есть просто добавьте дату слова перед вашими датами, это должно работать, если аргументы start_date
и end_date
определены как даты.
sale_procedure(
outletid => 809,
itemcod => 128169
,start_date => DATE '2018-01-01'
,end_date => DATE '2019-01-01'
,amount => var,
quantity => var1
);
ORA-01858: обнаружен нечисловой символ там, где ожидалось числовое значение ORA-06512: в "CSDENT.SALE_PROCEDURE", строка 3 ORA-06512: в строке 5
@shabanaAfzal: Эта ошибка не из-за того, как она называется. Что-то не так в вашей процедуре SALE_PROCEDURE
в строке 3/строке 5, как это ясно указано в ошибке.
СОЗДАЙТЕ ИЛИ ЗАМЕНИТЕ ПРОЦЕДУРУ SALE_PROCEDURE(OUTLETID IN number,itemCod IN number,START_Date IN DATE, END_DATE IN DATE,AMOUNT OUT NUMBER,Quantity OUT NUMBER )IS BEGIN выберите Сумма(Сумма)Сумма,сумма(количество)Количество В СУММУ,Количество из IDSTRANSACTION я присоединяюсь к lup l к l.OUTLET_ID=i.outlet_id JOIN LUP_ZONES Z ON Z.ZONE_ID=L.ZONE_ID присоединяюсь к продукту p к p.serial =itemCode присоединяюсь к lup_master m к m.sup_id = p.Supplier_ID, где l.OUTLET_ID в (OUTLETID ) и itemCode в (itemCod) и to_date(i.Entry_Date) между To_date('START_Date', 'MM,DD,YYYY') и To_date('END_DATE', 'MM,DD,YYYY');END;
@shabanaAfzal: проверьте пункт where
. Вам нужно только BETWEEN start_date and end_date
. Пожалуйста, исправьте это. Кстати, я ответил на ваш изначальный вопрос. Если вы нашли ответ полезным, считайте его принятие, чтобы он также помог другим. Любую новую проблему следует задавать отдельным вопросом, а не перетаскивать в раздел комментариев.
С конкретным сообщением об ошибке Oracle, таким как ORA-01843, всегда стоит вбить его в поисковик SO. На все распространенные ошибки есть несколько, если не десятки ответов на вопросы.