Apex按钮和步骤

时间:2018-12-06 18:01:31

标签: oracle oracle-apex

我试图在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 :(得分:1)

我建议您将该过程留在数据库中;从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;