2013-04-01 5 views
1

Я пытаюсь запросить триггеры из таблицы системных систем systriggers/systrigbody. Мне нужен столбец данных таблицы systrigbody, когда столбцы datakey являются «A» и «D», и должны игнорировать остальные. Вот мой код:Триггеры базы данных 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 

Проблема у меня в том, что это возвращение столбец данных только для «A» значение DataKey, или только для «D» (в зависимости, если ORDER BY является DESC или ASC). Мне нужны они оба. Любые указатели?

+0

Странно! Какая версия Informix на какой платформе? Это не должно иметь никакого значения, но почему бы не 'WHERE tb.datakey IN ('A', 'D')'? Вы также должны планировать использовать явное обозначение соединения; это лучший современный стиль SQL. –

+0

Im работает над eclipse EE в Windows 7. tbh, я не знаю версию informix. :/Я попробовал это. Также попробовал «WHERE tb.datakey NOT IN (« B »,« H »,« S »). Кажется, тоже не работает. Nothings, похоже, работает, поэтому я пришел сюда, задаваясь вопросом, возникла аналогичная проблема. – todor

+0

Не слышал о такой проблеме. Вы пробовали запрос в DB-Access? Вы должны использовать API-интерфейс для программирования из-за '' 'placeholder. Он не должен делать никаких шансов, но. .. –

ответ

0

Я изменил запрос немного (а) включить в список выбора tb.datakey, и (б) опустить условие на tabid (так он выбирает любой триггер для любой таблицы):

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 побежал на базе груженого с триггерами, и часть продукции была:

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')); 

Я потеряются выход, так что несколько заготовок были заменены одной заготовки. Всего было 110 линий; Я просто выбрал несколько из середины списка, где ключ данных изменился с 'D' на 'A'.

Это было выполнено в работе DB-Access (несколько); вы получите по существу тот же результат с 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 с Mac OS X 10.7.5.

+0

Я заработал. Пойдем за последний ответ и спасибо за вашу помощь. м, и это было в тестировании юнита, не проверили тест в самый раз.Im новое для баз данных, informix. У меня проблема в том, что запрос «couse» различной сортировки дал мне разные результаты. Оказывается, запрос был прочным. Всегда было 1 (из 2 необходимых). Thx снова, и извините за беспокойство, которое вы прошли. :) – todor

Смежные вопросы