2012-06-15 5 views
0

아래 쿼리는 Oracle에서는 작동하지만 BizTalk에서는 작동하지 않습니다. 빠른 구글은BizTalk가 하위 쿼리를 지원합니까?

"여러 문은 오라클 (그리고 다른 데이터베이스 이이 못할 수 있습니다) 작동하지 않는 것을 나에게 알렸다. Oracle이 SQL 주입 소위 방지, 해커가 사용하는 것이 메커니즘을 데이터베이스 내에 코드를 실행 시키십시오. "

하위 쿼리와 동일합니까? 하위 쿼리없이이 쿼리를 작성할 수 있습니까?

update order_header oh set uploaded = 'Y' 
where oh.user_def_chk_3 = 'N' 
and oh.status in('Complete','Shipped') 
and oh.client_id in (select c.client_id from client c 
    where upper(c.notes) like 'BERGEN%'); 
+2

biztalk에 대한 아이디어는 없지만 하위 쿼리와 여러 명령문은 서로 다른 것이므로 단일 명령문으로도 좋을 것입니다. 하지만 ... 당신이 어댑터를 통해 실행할 때 후행을 남겨 두시겠습니까? JDBC는 그것을 좋아하지 않으며, 두 문장을 함께 결합하려는 시도로 biztalk에 의해 해석 될 수 있습니다. 따라서 필자는 그것이 필요하지 않다고 생각합니다. 그렇지 않으면 실제 오류 메시지가 도움이됩니다. –

+0

@AlexPoole 와우, 하위 쿼리가 여러 개의 문장을 의미한다고 생각하지는 못했지만, BizTalk는 2 개의 쿼리가 있다고 생각합니다. 세미 콜론을 제거하면 문제가 해결되었습니다. – Andy

답변

2

(야생 추측 의견의 피드백을 기반으로 함) : BizTalk은 분명히 후행 ;을 명령문 구분 기호로 해석하므로 실제로는 하나만 있어도 다중 명령문 제한 사항에 위배됩니다. 세미콜론을 제거하면이 문제를 방지 할 수 있습니다.

단일 명령문에서도 SQL * Plus 및 SQL Developer 등에서 자주 사용되는 이유에 대한 배경은 this answer을 참조하십시오. 상황은 다른 클라이언트와 어댑터를 통해 다릅니다.

1

저장 프로 시저 또는 뷰 내에 쿼리를 배치 할 수 있습니다. 당신은 쿼리를 어떻게 실행하고 있는지 말하지 않았습니다. WCF 사용자 지정 어댑터를 사용하고 있습니까?

+0

데이터베이스가 우리에 의해 관리되지 않기 때문에 저장 프로 시저 및 뷰는 언제든지 제거 될 수 있습니다. 그것이 우리를위한 해결책이 아닙니다. 우리는 실제로 WCF-Custom 어댑터를 사용합니다. – Andy

관련 문제