8 / 8 / 13
Регистрация: 03.02.2013
Сообщений: 156
1

TQuery получить результат от update

08.11.2019, 11:22. Показов 4154. Ответов 1

Author24 — интернет-сервис помощи студентам
Задача такая: вставить в таблицу строку, если часть параметров совпадает с одной из строк в БД, то обновить.
Заставить работать один SQL запрос с Update и Insert я не смог, ни через PL/SQL, ни с помощью MERGE.
Запросы Update и Insert по отдельности выполняются. Хочется обойтись без процедур.
При использовании PL/SQL и MERGE выпадает ОШИБКА.
C++
1
2
3
4
5
try{ 
  m_Q_myQuery->ExecSQL();
} catch(...){
  ShowMessage("ОШИБКА");
}
Поэтому, хочу разделить запрос на два, один Update, другой Insert. Если update сработает, insert не трогаем, иначе вставляем.

Вопросы:
Как получить что-то от TQuery(UPDATE) чтобы понять что обновление сработало или нет?
Или как лучше поступить?
Все запросы рабочие, проверял на SQL Navigator.

SQL
1
2
3
4
UPDATE xxx_client_prices
SET    price = :price
WHERE      cnt_id        = :cnt_id
       AND nmcl_id       = :nmcl_id
SQL
1
2
3
4
5
6
7
INSERT INTO xxx_client_prices (id, cnt_id, nmcl_id, price)
SELECT goods.sq_xxx_client_prices.NEXTVAL,
       cc.cnt_id, 
       :nmcl_id, 
       :price
FROM companies_contractors cc
WHERE cc.cnt_id = :cnt_id;
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BEGIN
    UPDATE xxx_client_prices
    SET    price = :price
    WHERE      cnt_id        = :cnt_id
           AND nmcl_id       = :nmcl_id;    
    IF SQL%ROWCOUNT = 0 THEN  
        INSERT INTO xxx_client_prices (id, cnt_id, nmcl_id, price)
        SELECT sq_xxx_client_prices.NEXTVAL,
               cnt_id, 
               :nmcl_id
               :price
        FROM companies_contractors
        WHERE cnt_id = :cnt_id;
    END IF;
END;
SQL
1
2
3
4
5
6
7
8
9
10
MERGE INTO xxx_client_prices xcp
USING (SELECT * FROM companies_contractors) cc
ON (xcp.cnt_id = :cnt_id)
WHEN MATCHED THEN 
   UPDATE SET ycp.price    = :price
   WHERE cnt_id            = :cnt_id
         AND nmcl_id       = :nmcl_id              
WHEN NOT MATCHED THEN 
   INSERT (id, cnt_id, nmcl_id, price) 
   VALUES (sq_xxx_client_prices.NEXTVAL,cc.cnt_id,:nmcl_id,:price);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2019, 11:22
Ответы с готовыми решениями:

Получить результат update
День добрый! Использую pdo для postgresql Если выполняю UPDATE. как получить результат ( 50...

Как проанализировать результат запроса SELECT в TQuery.ExecSQL?
Требуется,не отображая на экране, проверить число записей в результирующем наборе данных, и если >...

Как получить напрямую ответ сервера СУБД используя TQuery?
День добрый! Есть проблема. Для доступа к базе данных использую компонент TQuery(могу использовать...

Результат запроса UPDATE
Добрый вечер. Я делаю запрос UPDATE к серверу SQL Server через рекордсет. Но после...

1
8 / 8 / 13
Регистрация: 03.02.2013
Сообщений: 156
09.11.2019, 11:15  [ТС] 2
Реализовал с помощью 3 запроса
SQL
1
2
SELECT COUNT(*) AS num 
FROM...
0
09.11.2019, 11:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2019, 11:15
Помогаю со студенческими работами здесь

Неправильный результат Update (select)
Есть две таблицы с одинаковыми столбцами im-nomer-col Первая таблица - Вася,,Красный;...

Как получить такой результат? Результат на Картинке
Как сделать так чтобы лого было по середине, а текст по бокам....все как на картинке? Что написать...

Получить данные из таблиц, update
Суть такова: хочу сделать update таблицы Report из данных, содержащихся в таблице Schet в которой...

SQLite. Получить кол-во строк, затронутых UPDATE
"SELECT changes()" не проверяет, изменились ли записи в БД или просто были перезаписаны. Значит,...

Получить результат!
Доброго времени суток, Уважаемые форумчане! Я - новичок в Access, но большое желание научится....

Получить результат запроса
Здравствуйте. Подскажите, пожалуйста, как можно получить результат запроса вот сам запрос ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru