Я пытаюсь написать функцию invoiceCheck
с одним входным параметром (номером счета), чтобы проверить, существует ли счет в моей базе данных.
Create or replace function invoiceCheck(invoice_number_text IN
char)
RETURN char IS
invoice_id_text invoices.invoice_id%type;
invoice_total_text invoices.invoice_total%type;
invoice_due_date_text invoices.invoice_due_date%type;
BEGIN
select invoice_total
into invoice_total_text
from invoices
where invoices.invoice_number=invoice_number_text ;
return invoice_total_text;
END;
Я также написал процедуру InvoiceDetail
, которая имеет один входной параметр (номер счета). В этой процедуре я вызвал функцию invoiceCheck
, чтобы проверить, существует ли счет, и если да, я хочу отобразить invoice_id
, invoice_total
и invoice_due_date
для этого счета. Если нет, я хочу распечатать сообщение “invoice not in the database”
из моей процедуры. Вот моя процедура:
Create or replace procedure InvoiceDetail(invoice_number_text IN
char) IS
exist_invoice_number char;
invoice_total_text invoices.invoice_total%type;
invoice_id_text invoices.invoice_id%type;
invoice_due_date_text invoices.invoice_due_date%type;
BEGIN
select count(*) into exist_invoice_number from invoices
where invoices.invoice_id = invoice_id_text;
if exist_invoice_number is not null then
invoice_id_text := invoiceCheck(invoice_number_text);
invoice_total_text := invoiceCheck(invoice_number_text);
invoice_due_date_text := invoiceCheck(invoice_number_text);
dbms_output.put_line('Invoice ID:' ||invoice_id_text);
dbms_output.put_line('Invoice Total:' ||invoice_total_text);
dbms_output.put_line ( 'Invoice Due Date:' || invoice_due_date_text);
else
dbms_output.put_line('Invoice not in the database');
end if;
END;
Когда я иду, чтобы выполнить номер счета-фактуры QP58872, используя:
set SERVEROUTPUT ON;
execute InvoiceDetail('QP58872');
Я получаю эту ошибку
ORA-01861: литерал не соответствует строке формата