2016-05-26 3 views
0

Позволяет сказать, что у меня есть простой SQL скрипт:SQL: Печать из команды UPDATE

UPDATE my_table 
SET data = new_data 
WHERE my_table.data IS NULL; 

Я хотел бы напечатать, идентификаторы, которые где обновляются в команде UPDATE. Так что-то вроде этой функциональности:

UPDATE my_table 
SET data = new_data, RAISE NOTICE 'Updated %', my_table.id 
WHERE my_table.data IS NULL; 

Возможно ли это? Я использую PostgreSQL.

+0

Вы хотите * вернуть * идентификаторы, а не распечатывать их. Печать означает отправку текстового сообщения клиенту. –

+0

Нет, я хочу напечатать их, поскольку я отлаживаю свой код - так же, как я обычно делаю с RAISE NOTICE из моего скрипта. – Arenlind

ответ

2

Хорошо, я придумал что-то вроде этого.

DO language plpgsql $$ 
DECLARE _id bigint; 
BEGIN 
    FOR _id IN 
    WITH up AS (
     UPDATE my_table 
     SET data = new_data 
     WHERE data IS NULL 
     RETURNING id) 
    SELECT id from up 
    LOOP 
     RAISE NOTICE 'Updated %', _id; 
    END LOOP; 
END 
$$; 

Это немного неуклюжий, но он должен работать на вас.

Сначала RAISE NOTICE должен быть обернут, как описано here. Я не нашел способа сохранить несколько строк (...RETURNING id) в переменных, которые могут быть недоступны в текущих версиях. Вот почему я разрешаю выбору следовать обновлению, которое само поставляет нужный RAISE.

+0

Работал отлично - большое спасибо, maxik !!! – Arenlind

1

Вы можете вернуть команду RETURNING оператора UPDATE, чтобы возвращать значения из каждой обновленной строки. Из примера документации:

UPDATE weather SET temp_lo = temp_lo+1, temp_hi = temp_lo+15, prcp = DEFAULT 
    WHERE city = 'San Francisco' AND date = '2003-07-03' 
    RETURNING temp_lo, temp_hi, prcp; 

Это вернет обновленные температуры.

В вашем случае вы можете попробовать:

UPDATE my_table 
SET data = new_data 
WHERE my_table.data IS NULL 
RETURNING id; 
+0

Это не отвечает на мой вопрос: как распечатать обновленные идентификаторы? – Arenlind

0

Если вы хотите вернуть обновленные строки ID, то попробуйте, как это,

Для обновления:

UPDATE my_table SET col2 = val2 WHERE col1 = val1 RETURNING ID; 

Для вставки:

INSERT INTO my_table (col2) значения (val2) RETURNING ID;

+0

Это не отвечает на мой вопрос: как распечатать обновленные идентификаторы? – Arenlind

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