2016-09-23 2 views
0

외부 프로 시저에서 값을 수집하는 테이블이 있습니다.변경 사항이 발생한 테이블의 모든 값의 배열 (Oracle Apex)

Name | State 
    Dan | Active 
    Stan | Active 
    Maggy| Inactive 

Apex에서 사용자가 상태 필드를 업데이트 할 수있는 다른 테이블의 선택 목록이있는 테이블 형식이 있습니다. 이 테이블은 다음과 같습니다 :

STATE_ID | STATE_NAME 
    Activate | Active 
    Deactivate| Inactive 

LOV에서이 필드를 호출하는 쿼리가 있습니다. 그런 다음 옵션을 전환하고로 표시됩니다

Name | State |Set_state 
    Dan | Active | Activate/Deactivate (in dropdown LOV) 
    Stan | Active | Activate/Deactivate (in dropdown LOV) 
    Maggy| Inactive | Activate/Deactivate (in dropdown LOV) 

이 사용자가 댄 비활성화해야한다고 결정하고 모든 관련 이름에 대한 드롭 다운 목록 등에서 비활성화를 선택할 수 있다는 것을 의미합니다.

이제 문제는 필자가 오라클 외부에서 다양한 작업을 수행하기 위해 외부에서 Perl 스크립트로 전송되는 절차입니다. 따라서 나는 모든 이름과 'Set_State'를 취하여 어레이 나리스트 형식으로 외부 스크립트에 배열이나 파일로 보내는 프로세스를 만들어야합니다.

이것은 처음에 한 것이지만 분명히 다음과 같이 작동하지 않습니다. P1_NAME 및 : SET_STATE는 실제 값이 아닌 열의 이름입니다. 내가 여기에 감각을 만드는 중이라서 희망 :

DECLARE 
    set_state VARCHAR2(20); 
    name VARCHAR2(20); 

    BEGIN 

    name := :P1_NAME; 
    set_state := :SET_STATE; 

    mytask := 'Change_state'; 
    PROC(name, set_state);    < This sends Name, Set_state to below procdure 
    END; 

누군가가 제출 버튼을 열 단지 이름을 클릭하고 있지 않을 때 P1_NAME 및 SET_STATE 열에서 모든 값을 포함하는 마지막 쿼리를 얻기 위해 나를 도울 수 바랍니다. 배열 또는 목록 형식입니다.

그래서이 변경되면 STAN는 보내야합니다, 비활성 및 활성에 Maggy 및 버튼을 클릭합니다 : 외부 절차에

활성 스탠 비활성 Maggy를.

이것은 Perl 스크립트를 호출하는 절차입니다. 어쨌든 quesiotn과 관련이 없지만 붙여 넣기. apex.item API 호출하지 고전 보고서 - 표준 표 형식 (업데이트 할 수있는 SQL 쿼리)와

create or replace PROCEDURE "PROC" (name IN VARCHAR2, set_state IN VARCHAR2) IS 

    BEGIN 

    DECLARE 

    BEGIN 
    mytask := 'PROC'; 
    myscriptname := 'Script'; 
    dbms_scheduler.create_job(
    job_name  => myscriptname 
    , job_type  => 'EXECUTABLE' 
    , job_action => '/app/proc.pl' 
    , number_of_arguments => 2 
    , enabled => FALSE); 
    dbms_scheduler.set_job_argument_value(myscriptname,1,name); 
    dbms_scheduler.set_job_argument_value(myscriptname,2,set_state); 
    dbms_scheduler.enable(myscriptname); 
    end; 
    END; 
+2

질문을 편집하고 ** 강조 표시 할 수있는 것은 무엇입니까? ** 정확히 도움이 필요하십니까? – simbabque

+0

안녕하세요. 즉, P1_NAME 및 SET_STATE 열에 모든 값을 제공하는 마지막 쿼리에서 솔루션이 필요합니다. 질문을 지금 편집 할 것입니다. –

+0

오라클을 실행하기 위해 당신은 무엇을 사용하며, 어떻게 당신의 펄 프로그램에 그것을 전달합니까? 프로그램이 기대하는 것에 영향을 줄 수 있습니까? 더 나은 점은 그 프로그램의 [mcve]와 그 프로그램의 실행 방법을 보여줄 수 있습니까? – simbabque

답변

0

.

100 % 명확하지 않기 때문에 설정에 대해 몇 가지 가정을하고 있습니다. 그것이 너무 중요하지 않아야하는 모든 방법과 일치하지 않는 경우 - 예로서 다루십시오.

쿼리 사용 :

SELECT name, state_id 
FROM states 

하였으되

  • NAME : 텍스트 필드, 또는 상태가
  • STATE_ID 활성화 저장에서만 표시 : 선택 목록 및 LOV 당신이했습니다 중고

on-submi 만들기 t 프로세스에 적용됩니다. 프로세스를 표 형식과 연관시켜야합니다. 범위를 '모든 작성 및 수정 된 행'으로 설정하십시오.
이렇게하면 표 형식의 각 적합한 행 범위에서 실행할 PLSQL을 작성할 수 있습니다. 바인드 변수 구문을 사용하여 상태 (예 : 텍스트 필드, 숨겨진 항목, 선택 목록, 확인란)를 제출하는 열을 참조 할 수 있습니다.
"모든 행"은 "현재 페이지 매김의 해당 행이 제출되었습니다"라는 것을 의미합니다.

이 경우, 아래의 PLSQL을 사용하여 변경된 각 행에 대해 프로세스를 실행할 수 있습니다.

BEGIN 
    PROC(name => :NAME, set_state => :STATE_ID); 
END; 

바인드 변수 구문의 실제 열 이름 (헤더)을 참조 할 수 있습니다. 핵심은 프로세스가 표 형식과 관련되어야한다는 것입니다!

(실제 "실제"표 형식이없는 경우이를 지적해야하며이 때문에 원본 SQL을 요청한 것입니다.이 정보는 다른 많은 정보보다 훨씬 중요합니다. 게시물에서 찾을 수 있습니다!)

+0

밀가루 톰 감사합니다! 이것이 내 해결책이 될 것 같습니다. 나가서 그것을 시도하자. 내가 고생하면 SQL 코드를 게시 하겠지만 예, 표준 또는 대화 형 보고서가 아닌 실제 표 형식입니다. –

+0

안녕하세요. 지연 돼서 죄송합니다. 나는 그걸 작동시킬 수 있었다. 당신의 대답은 기본적으로 내가 올바르게하고 있지만 결과를 얻지 못했다는 것을 보여주었습니다.그러나 일반 텍스트 옵션이 양식에 표시되지만 각 값을 저장하지 않는 것처럼 보이는대로 표 형식의 각 열 필드 유형을 "일반 텍스트"에서 "일반 텍스트 (상태 저장)"로 변경해야했습니다. 요점은, 지금 작동합니다! –

+1

@ user2082599 오른쪽 - "일반 텍스트"는 단지 "디스플레이 전용"입니다 (이것은 정점 4.2 용어입니다). "일반 텍스트 (상태 저장)"는 여전히 표시 전용이지만 추가 숨겨진 입력 필드를 생성합니다. 그래서 "특별히 저장 상태를 사용하여 표시"를 언급했습니다. "일반 텍스트"항목은 해당 상태를 세션에 제출하지 않으므로 plsql 프로세스에서 비어있게됩니다. 다행 이군! – Tom