我试图在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
有人知道解决方案吗?
答案 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;