2012-11-12 5 views
0

나는 beginend을 사용하여 모든 것을 시도하지만 작동하지 않는다. 어떻게 해결할 수 있습니까?ORA-00936 : 표현이 없습니다. 왜 내가이 메시지를받는거야?

select 
    case 
    when exists 
    (select ORG_UNIT_NAME from aaa.bbb 

    where ORG_UNIT_NAME ='ccc' and created_Date=to_date('01/11/2012','dd/mm/yyyy')) 

    then 

    update aaa.bbb 
    set PROJECT_QUOTA=555 where ORG_UNIT_NAME ='ccc' and created_Date=to_date('01/11/2012','dd/mm/yyyy') 


    else 
    'asd' 


    end as exist_ 
    from dual 

내가 'ddd'를 사용하는 경우 그 대신에 작업을 업데이트하는 대신 작동하지 않는 이유는 무엇입니까?

답변

1

SQL에서 CASE 구조는 흐름 제어 구조가 아닙니다. 그것을 COALESCE()의 일반화 된 버전이라고 생각하십시오. 안에 UPDATE 전체 쿼리를 넣을 수는 없습니다!

SELECT이 아닌 UPDATE 유형의 기본 쿼리를 원할 수도 있습니다. 몇 가지 복잡한 예제를 찾을 수 있습니다. http://psoug.org/reference/update.html

+0

존재하는 경우 업데이트하고 싶습니다. –

+0

정말 알고 싶지만 오라클은 예외를 만들지 않을 것입니다. 적절한 구문을 사용해야합니다. –

0

조건에 따라 업데이트하려면 WHERE 절에 추가하기 만하면됩니다. 그러나 당신이 이미 거기에 그것을 가지고 있었다는 것을 짐작하십시오. 이 질의는 당신이 원하는대로해야합니다 - 그렇지?

update aaa.bbb 
set PROJECT_QUOTA=555 
where ORG_UNIT_NAME ='ccc' and created_Date=to_date('01/11/2012','dd/mm/yyyy')