Кнопка Apex и процедура - PullRequest
       8

Кнопка Apex и процедура

0 голосов
/ 06 декабря 2018

Я пытаюсь создать кнопку в Apex, которая выполняет данную процедуру.В качестве входных значений я дал два поля даты, называемые Poczatek и Koniec.Кнопка должна выполнить эту процедуру при отправке.Это прекрасно работает в Oracle, но выдает много ошибок в Apex.

set serveroutput on
create or replace procedure KORELACJA(:Poczatek, :Koniec)
IS
miasto VARCHAR(25);
korelacja NUMBER;
cursor c1 is
    SELECT TEMP.nazwa, corr(TEMP.temperatura, WILGOTNOSC.wilg) 
    FROM TEMP INNER JOIN WILGOTNOSC
     on TEMP.nazwa = WILGOTNOSC.nazwa 
     and TEMP.data = WILGOTNOSC.data 
     WHERE TEMP.data between to_date(:Poczatek, 'YYYY-MM-DD') and to_date(:Koniec, 'YYYY-MM-DD') 
    GROUP BY TEMP.nazwa;
BEGIN 
DBMS_OUTPUT.put_line(RPAD('Miasto',10)||RPAD('Korelacja',10));
open c1;
FOR i IN 1..6
LOOP
commit;
fetch c1 into miasto, korelacja;
DBMS_OUTPUT.put_line(RPAD(miasto,10)||RPAD(korelacja,10));
END LOOP;
close c1;
END KORELACJA;
/

Ошибки выглядят так:

1 error has occurred
ORA-06550: line 2, column 5: PL/SQL: ORA-00922: missing or invalid option 
ORA-06550: line 2, column 1: PL/SQL: SQL Statement ignored ORA-06550: line 6, 
column 11: PLS-00103: Encountered the symbol "NUMBER" when expecting one of the 
following: := . ( @ % ; ORA-06550: line 9, column 18: PLS-00103: Encountered the symbol "JOIN" when 
expecting one of the following: , ; for group having intersect minus order start 
union where connect

Кто-нибудь знает решение?

1 Ответ

0 голосов
/ 06 декабря 2018

Я бы посоветовал вам оставить процедуру в базе данных;позвоните из Apex.

Как вы сказали, что все работает хорошо, я не собираюсь изучать код.Просто измените первую строку:

create or replace procedure KORELACJA(par_Poczatek in date, 
                                      par_Koniec    in date)
is ...

Затем, в процессе Apex, вызовите процедуру как

korelacja(:p1_poczatek, :p2_koniec);

Обратите внимание, что вам может потребоваться применить функцию TO_DATE к этим элементам, используя соответствующий форматмаска, такая как

korelacja(to_date(:p1_poczatek, 'dd.mm.yyyy',
          to_date(:p1_koniec  , 'dd.mm.yyyy');

Если вы настаиваете на сохранении процедуры в процессе Apex (я бы не рекомендовал это), вам не нужен CREATE PROCEDURE, но анонимный PL /Блок SQL.Он не принимает никаких параметров - используйте элементы Apex напрямую.

declare
  miasto    VARCHAR(25);
  korelacja NUMBER;
  cursor ...
    WHERE TEMP.data between to_date(:p1_Poczatek, 'YYYY-MM-DD') ...
begin
  ...
end;
...