2013-04-01 3 views
1

"systriggers/systrigbody"informix 시스템 테이블에서 트리거를 쿼리하려고합니다. datakey 열이 'A'와 'D'일 때 systrigbody 테이블의 데이터 열이 필요하며 나머지는 무시해야합니다.Informix 데이터베이스 트리거

SELECT tr.tabid, tr.trigid, tr.trigname, tr.owner, tb.data 
FROM systriggers tr, systrigbody tb 
WHERE tr.tabid = ? 
AND tr.trigid = tb.trigid 
AND tb.datakey != 'B' AND tb.datakey != 'H'AND tb.datakey !='S' 
ORDER BY tb.datakey DESC 

문제 나 데 그것을 전용 또는 전용 (ORDER BY는 DESC, 또는 ASC 경우에 따라) 'D'에 대한 'A'datakey 값에 대한 데이터 열을 반환하는 점이다 : 여기에 내 코드입니다. 둘 다 필요해. 어떤 포인터?

SELECT tr.tabid, tr.trigid, tr.trigname, tr.owner, tb.datakey, tb.data 
FROM systriggers tr, systrigbody tb 
WHERE {tr.tabid = ?} 
{AND} tr.trigid = tb.trigid 
AND tb.datakey != 'B' AND tb.datakey != 'H'AND tb.datakey !='S' 
ORDER BY tb.datakey DESC; 

I을 : 나는 (a)는 선택 목록에서 tb.datakey 포함하고, (B)는 tabid에 조건을 생략 (그래서 모든 테이블에 대한 모든 트리거를 선택합니다) 약간에 쿼리를 수정

+0

이상! 어떤 플랫폼에서 어떤 버전의 Informix를 사용할 수 있습니까? 그것은 어떤 차이를 만들어서는 안되지만, 왜'tb.datakey IN ('A', 'D')'가 아닌가? 명시 적 조인 표기법을 사용하도록 계획해야합니다. 더 현대적인 SQL 스타일입니다. –

+0

윈도우 7에서 일식 전자 작업을하고있다. tbh, informix의 버전을 모른다. :/나는 그것을 시도 .. 또한 시도 "어디서 tb.datakey 안 ('B', 'H', 'S'). 일하지 않는 것. 아무 것도 작동하는 것, 그래서 내가 여기 와서 궁금해 누군가가 비슷한 문제가 있습니다 ... – todor

+0

DB-Access에서 쿼리를 시도 했습니까? '?'자리 표시자가 있기 때문에 프로그래밍 언어 API를 사용해야합니다. . ... –

답변

0

트리거 라덴 데이터베이스에 그것을 실행, 출력의 일부였다 : 복수의 공백은 하나의 공백으로 대체되었다 있도록

124|49|u_timerecord|wtsdba|D|create trigger "wtsdba".u_timerecord update on "wtsdba".timerecord 
124|50|d_timerecord|wtsdba|D|create trigger "wtsdba".d_timerecord delete on "wtsdba".timerecord 
125|51|u_wi_buglist|wtsdba|D|create trigger "wtsdba".u_wi_buglist update on "wtsdba".wi_buglist 
127|52|u_wi_problem|wtsdba|D|create trigger "wtsdba".u_wi_problem update on "wtsdba".wi_problem 
128|53|u_wi_task|wtsdba|D|create trigger "wtsdba".u_wi_task update on "wtsdba".wi_task 
106|15|d_workstate|wtsdba|A| before\ (\ execute procedure "jleffler".wtsdba_del('WorkState')); 
106|14|u_workstate|wtsdba|A| before\ (\ execute procedure "jleffler".wtsdba_upd('WorkState')); 
114|29|u_sec_action|wtsdba|A| before\ (\ execute procedure "jleffler".wtsdba_upd('SEC_Action')); 
107|16|d_workitem|wtsdba|A| before\ (\ execute procedure "jleffler".wtsdba_del('WorkItem')); 
115|30|u_wts_menu|wtsdba|A| before\ (\ execute procedure "jleffler".wtsdba_upd('WTS_Menu')); 

내가 출력을 munged. 총 110 행이 있습니다. 데이터 키가 'D'에서 'A'으로 변경된 목록의 중간에서 몇 개를 선택했습니다.

이것은 DB 액세스 작업 (다소)에서 실행되었습니다. 당신은 DB-Access로 근본적으로 같은 결과를 얻지 만, 포맷은 훨씬 더 장황 할 것이다.

이 글에서는 쿼리가 근본적으로 건전하다는 것을 추론합니다. 이상한 결과를보고 있다고 논쟁하지 않습니다. 따라서 최소한의 테스트 케이스, 즉 표시된 쿼리 또는 원래 쿼리를 실행하고 문제를 나타내는 간단한 Java 및 JDBC 프로그램 (SSCCE-Short, Self-Contained, Correct Example - 다른 말로하면)을 생성해야합니다. 문제. 그런 다음 문제를 재현 할 수 있기를 바랍니다. '동일한'카탈로그 데이터로 작업 할 수 있도록 트리거가있는 간단한 테이블의 스키마를 포함하십시오.

또한 사용중인 Informix의 버전을 찾는 데 도움이됩니다.

SELECT DBINFO('version', 'full') FROM SysTables WHERE TabID = 1; 

지원되지 않기 때문에 실패하면 Informix는 오래 동안 지원되지 않습니다. 출력 :

IBM Informix Dynamic Server Version 11.70.FC6 

Mac OS X 10.7.5가 설치된 Mac에서 실행됩니다.

+0

늦게 답장을 보내 주셔서 감사 드리며 도움을 주신 데 대해 감사드립니다. 나는 마지막으로 내 proble을 발견했습니다. 그리고 그것은 junit 테스트에 있었고, 테스트를 올바르게 실행하지 않았습니다.Im 새로운 데이터베이스, informix. 나는 내 문제를 해결하기 위해 쿼리 '다른 정렬이 내게 다른 결과를 주었다. 쿼리가 견고했다. 항상 1 (2 필요) 누락되었습니다. Thx 다시, 당신이 겪은 문제로 인해 미안합니다. :) – todor

관련 문제