2014-05-13 2 views
0

데이터베이스의 사용자 상태 수준을 자동으로 업데이트하는 트리거를 만들려고합니다. 상태 수준은 사용자가 생성 한 수익 금액을 기반으로합니다. 이것은 내가 지금까지 생각해 낸 것입니다.트리거 - SQL 문 무시한 오류

create or replace trigger update_hirer_status 
after insert or update of payment_id, status_id on payments 
for each row 
declare 
user_id_temp number := 0; 
total_amount number := 0; 

begin 
select external_users.external_user_id into user_id_temp 
from external_users 
join financial_accounts 
using (external_user_id) 
join payments 
on financial_accounts.account_number = payments.sending_account_number 
where financial_accounts.account_number = payments.sending_account_number; 

select sum(amount) into total_amount 
from payments 
join 
financial_accounts 
on payments.sending_account_number = financial_accounts.account_number 
join external_users 
on financial_accounts.external_user_id = external_users.external_user_id 
where payments.status_id = 1 
and financial_accounts.external_user_id = user_id_temp; 

if total_amount >= 2000 
then update external_users 
set status_id = 4 
where external_user_id = user_id_temp; 

elsif total_amount >= 500 
then update external_users 
set status_id = 3 
where external_user_id = user_id_temp; 

elsif total_amount >= 100 
then update external_users 
set status_id = 2 
where external_user_id = user_id_temp; 

end if; 
end; 

나는 다음과 같은 오류 메시지가 나타납니다이 트리거를 만들려고 할 때 : 6 호선에서

오류 : PL/SQL : 사람이 무엇을 알고 있나요 SQL 문

declare 
user_id_temp number := 0; 
total_amount number := 0; 
begin 
select external_users.external_user_id into user_id_temp 

무시를 문제 수도 있다? 피드백을 많이 주셨을 때 트리거를 만들려고 시도한 것은 이번이 처음입니다.

+0

그게 유일한 오류입니다. 당신은 그 중 한 블록을 얻지 못했고, 그 중 하나는 실제 문제를 부각시켜야합니까? 어떻게 그리고 어디서 이걸 운영하고 있습니까? –

답변

1

문제는 다음과 같은 성명에서

select external_users.external_user_id into user_id_temp 
    from external_users 
    join financial_accounts 
    using (external_user_id) 
    join payments 
    on financial_accounts.account_number = payments.sending_account_number 
    where financial_accounts.account_number = payments.sending_account_number; 

USING 절은 하나의 EXTERNAL_USER_ID 필드에 EXTERNAL_USERS.EXTERNAL_USER_IDFINANCIAL_ACCOUNTS.EXTERNAL_USER_ID을 병합, 따라서 더 이상 EXTERNAL_USERS.EXTERNAL_USER_ID을 말할 수 있다는 것입니다. 명세서를

select external_user_id 
    into user_id_temp 
    from external_users 
    join financial_accounts 
    using (external_user_id) 
    join payments 
    on financial_accounts.account_number = payments.sending_account_number 
    where financial_accounts.account_number = payments.sending_account_number; 

으로 변경하고 사용해보십시오.

공유하고 즐기십시오.

+0

감사합니다. 나는 이것을 시도했고 방아쇠가 성공적으로 만들어졌다. 불행히도 실제로 결제 테이블에 업데이트하거나 삽입 할 때 작동하지 않습니다. – user3632272

+0

그건 불행한 일이지만 다른 질문에 대해서는 좋은 주제가 될 것입니다. 새 질문을 만들고, 트리거 코드와 모든 관련 정보를 게시하십시오. 누군가가 아이디어를 제공 할 수 있습니다. –