2016-07-15 1 views
0

Oracle Apex 페이지에서 패키지로 배열 매개 변수로 전달 날짜가 ​​붙어 있습니다. 패키지에는 날짜 유형의 배열이있는 프로 시저가 하나 있습니다. 그래서 내가하고 싶은 것은 Apex 페이지에서 pl/sql 블록으로 간단한 날짜를 전달하는 것입니다. 지금까지 내 코드는 다음과 같습니다.Oracle Apex Page의 값 배열을 Oracle 저장 프로 시저로 전달하는 방법

create or replace PACKAGE PK_NAME AS 

TYPE DATES_ARRAY_TYPE IS VARRAY(100) OF DATE; 

PROCEDURE PASS_DATES (
     DATES DATES_ARRAY_TYPE 
); 

END PK_NAME; 

create or replace PACKAGE BODY PK_NAME AS 

PROCEDURE PASS_DATES (
    DATES DATES_ARRAY_TYPE 
) AS  
BEGIN  
for i in 1..DATES.count loop     
    HTP.P(DATES(i)); 
end loop; 
END; 
END PASS_DATES; 

END PK_NAME; 

간단합니다. 그리고 나는 에이펙스 페이지 PL/SQL 블록에서이 프로 시저를 호출 :

•ORA-06550: line 3, column 25: PLS-00312: a positional parameter association may not follow a named association ORA-06550: line 2, column 1: PL/SQL: Statement ignored

그러나

PK_NAME.PASS_DATES (
    DATES => '15-JAN-15', '16-JAN-15', '17-JAN-15' 
); 

, 그것은 나에게 오류를 제공, 나는 그것을 저장하기 위해 노력하고있어 모든 시간을 작동하지 않습니다

무엇이 잘못 되었나요? 무엇을 놓쳤습니까?

답변

1

https://docs.oracle.com/cd/A97630_01/appdev.920/a96624/05_colls.htm

당신은 내가 당신이 패키지 PK_NAME (글로벌되지 않음)에서 TYPE을 사용하려는 경우 당신은 같은 개체를 사용해야합니다이

create TYPE DATES_ARRAY_TYPE IS VARRAY(100) OF DATE; 

create or replace procedure test_case(p_dates DATES_ARRAY_TYPE) is 
begin 
    dbms_output.put_line(p_dates(1)); 
end; 

declare 
a DATES_ARRAY_TYPE; 
begin 
a := DATES_ARRAY_TYPE(sysdate, sysdate + 1,to_date('1.01.2016','dd.mm.yyyy')); 
    test_case(a); 
end; 

과 같이 생각합니다 생성자 DATES_ARRAY_TYPE() init을해야한다

코드에서 PK_NAME.DATES_ARRAY_TYPE. 공정 제출 후 https://gyazo.com/789b875ce47852e859c395c2021f9cd4

create or replace PACKAGE PCK AS 
    -- your type in pck 
    TYPE DATES_ARRAY_TYPE IS VARRAY(100) OF DATE; 
    procedure test_case(p_dates DATES_ARRAY_TYPE);  
END PCK; 

create or replace PACKAGE body PCK AS 
    procedure test_case(p_dates DATES_ARRAY_TYPE) IS 
    BEGIN 
    --here just raise second element in array for DEMO 
    raise_application_error('-20000',p_dates(2)); 
    END; 
END PCK; 

2.create 페이지와 버튼 : https://gyazo.com/755f6e089db0a6a8ea058567d2b3384b

declare 
    asd PCK.DATES_ARRAY_TYPE := PCK.DATES_ARRAY_TYPE('31-JUL-15', '01-AUG-15', '02-AUG-13', '03-AUG-13'); 
begin 
    pck.test_case(asd); 
end; 
1. 패키지와 몸을 만들 : 확인

, 당신의 경우에 갈 수

  1. 페이지를 제출 한 버튼 후 : https://gyazo.com/b894fc6b9b6dd28964ba2e6548244bc8
+0

Apex 페이지 내에 코드가 하나 더있는 영역을 만들었습니다. "선언 array_t 유형은 VARRAY (50)입니다. 배열 array_t : = array_t ('31 -JUL-15 ', '01 -AUG-15', '02 -AUG-13 ', '03 -AUG-13'); begin i에 대해 을 1.array.count 루프에 넣습니다. htp.prn (array (i)); 끝 루프; end; "잘 작동하지만, 우리의 요구 사항은 Apex의 패키지 프로 시저를 호출하고 날짜 배열을 전달하는 것입니다. 따라서이 작업 예제는 옵션이 아닙니다. 두려운 것입니다. 특정 요구 사항을! 그리고 대답 Анатолий, 고마워 주셔서 감사합니다! – USSR

+0

그리고 내가 PK_NAME.DATES_ARRAY_TYPE 사용하려고하면 그것은 오류가 발생합니다 : "ORA-06550 : 줄 2, 열 1 : PLS-00221 : 'DATES_ARRAY_TYPE'않습니다. 프로 시저 또는 정의되지 않았습니다 ORA-06550 : 줄 2, 열 1 : PL/SQL : 문 무시됩니다. 그리고 네, 패키지 내에서 그것을 사용하고 싶습니다. 링크를 주셔서 감사하지만 첫 번째 만들 때 그것을 따라 내 패키지, 단순히 내 요구 사항을 지원하기 위해 그것을 변환하려고 노력했다. 그리고 요구 사항은, 패키지를 사용하여 단순히 Apex 지역 PL/SQL 블록에서 절차를 호출하고 매개 변수로 여러 날짜를 전달 ... – USSR

+0

안녕, 내 친구, 내가 편집 해요 몇 가지 예를 추가하려면 내 대답 스크린 샷. 그것을 참조하십시오, 당신이 문제를 해결하는 데 도움이되기를 바랍니다. :) –

관련 문제