2016-06-29 2 views
0

Здравствуйте, я запрашивая базу данных Teradata подобное:КШ-обновление: Получить строки пострадавших

for var in `db2 -x "$other_query"`; 
do 
query_update_date="update test SET date =Null WHERE 
name_test='$var '" 
db2 -v "$query_update_date" 
done 

Мой запрос выполняется, но то, что я хотел бы напечатать query_update_date только тогда, когда одна строка или более пораженной (изменено) путем обновления.

Пример:
Если у меня
первый запрос из цикла:

query_update_date="update test SET date =Null WHERE 
name_test='John'" 

и второй запрос петли:

query_update_date="update test SET date =Null WHERE 
name_test='Jeff'" 

и в моей таблице перед запросом:

name_test   date 
Jeff    01/07/2016 
John    Null 

После запроса

name_test   date 
Jeff    Null 
John    Null 

Дата от Джона была уже нулевой, поэтому обновление не повлияло на нее. И

db2 -v "$query_update_date" 

печати мои запросы. Я хочу, чтобы предыдущий пример был напечатан только в моих журналах.

+0

Скопируйте вставить образец вывода, который вы ожидаете от запроса, то есть значение, которое может быть сохранено в переменной. – Inian

+0

Я собираюсь отредактировать тему – John

+0

В некоторых случаях query_update_date не будет влиять на строку, потому что дата уже будет Null. Мне не нужны эти запросы для моих журналов – John

ответ

0

Сделайте снимки таблицы до и после выполнения запроса. Используйте любые инструменты, которые вам нравятся: как насчет (при условии SQL) SPOOL a «SELECT * FROM T» запрос в этот файл заранее и в этот файл впоследствии. Использование командной UNIX Diff команды для сравнения двух файлов, а просто посчитать длину его выхода:

LINES_OUT = $ (дифференциалы oldResults newResults | туалет -l)
, если [[$ LINES_OUT = 0 ]]
затем
        # регистрировать запрос, однако вы делаете что
фи

Если $ IS_ANY_DIFF истинно, зарегистрируйте запрос; в противном случае - нет.