ORACLE SQL Как использовать пользовательскую функцию iside insert cte - PullRequest
2 голосов
/ 17 февраля 2020

Я пытаюсь использовать функцию внутри вставки SQL, но получаю ошибку ORA-32034. Похоже, я не мог получить доступ к этой функции в Cte. Может быть, кто-то может помочь?

    insert into table1 (     

    Field1, 
    Field2, 
    Field3
 ) 

   with 


function STR_country(in_str  VARCHAR2) return char is out_str char(2);
    begin
          out_str :='';
          if    SUBSTR(in_str,1,1)= 'A'  then out_str :='AT';
          elsif SUBSTR(in_str,1,1)= 'D'  then out_str :='DE';
          elsif SUBSTR(in_str,1,2)= 'CH' then out_str :='CH';
          elsif SUBSTR(in_str,1,2)= 'CZ' then out_str :='CZ';
          elsif SUBSTR(in_str,1,1)= 'H'  then out_str :='HU';
          else  out_str := ' '; 
         end if;
          return out_str   ; 
   end;



help_select_transactions1 as
(select distinct 

    master.reference,
   f.start_date, 
   f.end_date,
   f.Branch_NO, 
   f.seq,
   master.SOURCEAPPLICATIONCODE,
   f.PAYRECIND,
   f.NOSTRODDAINDICATOR,
   f.PAYMENTVALUEDATE,
   f.PAYMENTCURRENCY,
   f.PAYMENTAMOUNT,
  STR_country(customer1.address3)   as customer_country,
   STR_country(customer2.address3)   as customer_country2)

1 Ответ

2 голосов
/ 17 февраля 2020

Если запрос, содержащий раздел объявления PL / SQL, не является запросом верхнего уровня, запрос верхнего уровня должен включать подсказку WITH_PL SQL. Без этой подсказки оператор не сможет скомпилировать

Это говорит о документации . Таким образом, в этом случае вам, вероятно, понадобится:

insert /*+ WITH_PLSQL*/ into table1 (Field1, Field2, ...

dbfiddle с аналогичной таблицей

...