Ошибка в коде процесса: ORA-06502: PL / SQL: ошибка числового значения: ошибка преобразования символа в число

#oracle-apex #plsqldeveloper #oracle-apex-5 #oracle-apex-5.1

#oracle-apex #plsqldeveloper #oracle-apex-5 #oracle-apex-5.1

Вопрос:

Вот мой код Plsql, используемый внутри кода процесса, но я получаю ошибку при преобразовании символа в число, из-за столбца l_receipt_date мне нужно вставить дату в формате ‘ГГГГ-ММ-ДД’, как указано ниже, поэтому я использовал приведенный ниже код внутри процесса, l_receipt_date:=to_char(: P4_RECEIPT_DATE, ‘ГГГГ-ММ-ДД’); , я получаю ошибку из-за этой строки выше.Вот мой код Plsql, используемый внутри кода процесса, но я получаю ошибку при преобразовании символа в число, что связано с столбцом l_receipt_date

 DECLARE
    l_clob            CLOB;
    l_emp_no          NUMBER;
    l_status          VARCHAR2(100);
    l_employee_name   VARCHAR2(100);
    l_id              NUMBER;
    l_employee_salary NUMBER;
    l_employee_age    NUMBER;
    l_request_url     VARCHAR2(200);
    l_body_clob    clob;
    x_err varchar2(2000);
    l_receipt_date  varchar2(1000);
begin

l_request_url := 'https://fa-eoxd-test-saasfaprod1.fa.ocs.oraclecloud.com/fscmRestApi/resources/latest/standardReceipts/';
apex_web_service.g_request_headers(1).name := 'Content-Type';
apex_web_service.g_request_headers(1).value := 'application/json';


l_receipt_date:=to_char(:P4_RECEIPT_DATE,'YYYY-MM-DD');


l_body_clob:='{
"ReceiptNumber":"'||:P4_RECEIPT_NUMBER||'"
,"BusinessUnit":"'||:P4_OPERATING_UNIT_NAME||'"
,"ReceiptMethod":"'||:P4_RECEIPT_METHOD||'"
,"ReceiptDate":"'||l_receipt_date||'"
}';
    
 l_clob :=                                           
APEX_WEB_SERVICE.MAKE_REST_REQUEST(
    p_url  => l_request_url,
    p_http_method  => 'POST',
    p_username     => 'fin.user',
    p_password    => 'Fusion@123',
    p_body => l_body_clob) ;  

htp.p(l_clob);
exception when others then 
x_err:=sqlerrm;
htp.p(x_err);
END; 
  

Ответ №1:

P4_RECEIPT_DATE является элементом страницы, и все элементы страницы являются символьными строками. Поэтому, прежде чем вы сможете TO_CHAR преобразовать его в другую форматированную строку, вам сначала нужно TO_DATE привязать его к дате. Предположим, что в настоящее время он находится в формате DD-MON-YYYY . Затем вам нужно будет сделать это:

 l_receipt_date:=to_char(to_date(:P4_RECEIPT_DATE, 'DD-MON-YYYY'),'YYYY-MM-DD');
  

т.е.

  1. Возьмите строку в P4_RECEIPT_DATE и преобразуйте ее в ДАТУ, используя формат ДД-ПН-ГГГГ.
  2. Возьмите эту дату и снова преобразуйте ее в строку в формате ГГГГ-ММ-ДД.

Комментарии:

1. Спасибо @Tony, ее устранение я изменил как l_receipt_date:=to_char(to_date(: P4_RECEIPT_DATE, ‘ДД-ММ-ГГГГ’), ‘ГГГГ-ММ-ДД’);