저는 Apex 4.2.4와 Oracle 11g를 사용하고 있습니다. 여러 개의 메일 링리스트를 관리하는 메일 링리스트 애플리케이션이 있습니다. 주어진 수신자는 하나 이상의 목록에 속할 수 있습니다. 목록을 관리하기 위해 Apex Shuttle을 사용하고 있습니다. 모든 메일 수신자의 출처는 mail_recipient 테이블에 있습니다.oracle apex shuttle saving deselections
- prim_key
- FIRST_NAME 주어진 메일 링리스트에 대한 선택받는 사람을 저장하는 다른 테이블이 있습니다
- prim_key
- recipient_fkey (이것은 mail_recipient 테이블에서 prim_key 저장)
- 카테고리
- merge_check
두있다 페이지에 표시된 항목을 표시. 범주 드롭 다운리스트 (P31_email_list) 및 셔틀 (P31_email_list_assignments)는 P31_email_list_assignments 대한 LOV은 :
는Select last_name || ', ' || first_name || ' -- ' || email_address, prim_key from mail_recipient
order by 1;
셔틀의 소스 PL/SQL 함수 체이다
declare
emp_list apex_application_global.vc_arr2;
i number := 1;
begin
for r in (Select mr.last_name || ', ' || mr.first_name || ' -- ' || mr.email_address, mr.prim_key
From mail_recipient mr left outer join
mail_recipient_category mrc
On mr.prim_key = mrc.recipient_fkey
Where mrc.category = :P31_EMAIL_LIST)
loop
emp_list(i) := r.prim_key;
i := i + 1;
end loop;
return APEX_UTIL.TABLE_TO_STRING(emp_list, ':');
end;
가있다 단일 페이지 프로세스가 데이터베이스 테이블 mail_recipient_category를 업데이트합니다. 프로세스는 계산 및 검증 후에 제출할 때 실행됩니다. 셔틀은 왼쪽에서 오른쪽으로로드하고 항목을 저장 잘 작동
MERGE INTO MAIL_RECIPIENT_CATEGORY ss
USING (
Select
shuttle.column_value shuttle_st
, db.recipient_fkey db_st
from
table(string_to_coll(:P31_email_list_assignments)) shuttle
left outer join mail_recipient_category db
on shuttle.column_value = db.recipient_fkey
and db.category = :P31_email_list) t
on (ss.recipient_fkey = t.db_st
and ss.category = :P31_email_list
)
when matched
then
update
set
ss.merge_check = ss.merge_check
delete
where
t.shuttle_st is null and ss.category = :P31_email_list
-- t.shuttle_st is null
when not matched
then
insert
(recipient_fkey, category)
values
(t.shuttle_st, :P31_email_list);
end;
시작 . 내가 가지고있는 문제는 셔틀의 오른쪽에서 왼쪽으로 항목을 선택 해제하는 것입니다. 메일 수신자를 오른쪽에서 왼쪽으로 이동 한 후 전송 버튼을 누르면 항목이 셔틀의 오른쪽을 떠나지 않고 프로세스가 mail_recipient_category 테이블에서 행을 삭제하지 않습니다.
감사합니다.
mail_recipient_category 테이블에 선택된 값 (제거 된 * 값은 포함하지 않음)에서 LEFT 외부 조인을 수행하고 있습니다. 오른쪽 외부 조인을 원한다고 생각합니다. 테이블에서 * 삭제되었지만 P31_email_list_assignments에서 제거 된 테이블을 선택하려고하기 때문입니다. –
제프리, 제안 해 주셔서 감사합니다. 나는 오른쪽 외부 조인을 시도했다. 이제 오른쪽에서 왼쪽으로 항목을 이동하여 저장하려고하면 ORA-80006이 표시됩니다. 지정된 행은 페이지 프로세스에서 더 이상 존재하지 않지만 아직 행은 mail_recipient_category 테이블에 계속 존재합니다. 이것 좀 봐 줘서 고마워. Phil – user3138025
확실하지 않은 경우 - ORA-08006은 쿼리가 두 번 이상 행과 일치하고 두 번 삭제하려고한다는 것을 의미 할 수 있습니다. 아마도 자체적으로 쿼리를 실행하고 결과를 살펴보십시오. –