powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
13 сообщений из 13, страница 1 из 1
Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
    #34100599
OlegA67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT. То есть где-то во вложенном запросе вставить INSERT, DELETE, UPDATE.
...
Рейтинг: 0 / 0
Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
    #34100714
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Можно .
...
Рейтинг: 0 / 0
Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
    #34100884
OlegA67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо
...
Рейтинг: 0 / 0
Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
    #34115269
OlegA67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По ходу возникли еще вопросы.
1. Запрос вида
Код: plaintext
1.
SELECT empno, salary FROM FINAL TABLE
(UPDATE employee SET salary = salary *  1 . 10  WHERE job = 'CLERK') 
не должен работать, если на столбец salary имеется тригер на обновление этого столбца ? (у меня по не работает)
2. Можно ли в запрос вида
Код: plaintext
1.
SELECT empno, salary FROM FINAL TABLE
(UPDATE employee SET salary = salary *  1 . 10  WHERE job = 'CLERK') 
вставить после оператора SELECT столбы из другой таблицы, и где тогда прописать оператор JOIN для связывания разных таблиц.
...
Рейтинг: 0 / 0
Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
    #34115309
Nikolay Kulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно.
...
Рейтинг: 0 / 0
Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
    #34115370
OlegA67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно я так понимаю это на 2 вопрос
тогда если не трудно можно првести синтаксис команды, заранее спасибо
...
Рейтинг: 0 / 0
Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
    #34116052
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2OlegA67

Должно работать.
Вот например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create table employee (empno int, salary decimal( 10 ))@
create trigger employee_bir
before update of salary
on employee
referencing new as n old as o
for each row
set n.salary= 2 *n.salary
@
insert into employee(empno, salary) values ( 1 ,  10 )@

WITH T AS (
SELECT empno, salary 
FROM FINAL TABLE
(UPDATE employee SET salary = salary +  1 )
)
SELECT * FROM T, SYSIBM.SYSDUMMY1 D@
...
Рейтинг: 0 / 0
Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
    #34116069
Nikolay Kulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть три вида таблиц и которых ты можешь делать выборку после операторов IUD
NEW (для INSERT и DELETE)
Можно просмотреть
-Значения вычисленные пользователем
-IDENTITY
[Что выставил триггер BEFORE
-Генерируемые столбцы

OLD (для DELETE и UPDATE) -
Просмотр оригинальных значения перед модификацией

FINAL
Содержимое после проверки RI и отработки AFTER триггера
Не разрешаются конфликты на изменяющейся (mutating) Талице
FINAL TABLE = NEW TABLE


Расширение промежуточной таблицы используя INCLUDE
Добавляется справа
Передает значения верхнему запросу после UDI.
Пример
Кол-во строк
Предоставить OLD иNEW/FINAL строки в UPDATE
insert в несколько таблиц

Код: plaintext
1.
2.
3.
4.
SELECT c1, old_c1 
  FROM NEW TABLE(UPDATE T INCLUDE (old_c1 INT)
                    SET c1     = -c1, 
                        old_c1 =  c1)


ORDER BY INPUT SEQUENCE
Наследует порядок многострочного VALUES или SELECT после INSERT
Наследует SELECT ORDER после INSERT
Извлекает вставленные строки в курсор в том же порядке как они поступули
INSERT сам по себе не имеет порядка!
Код: plaintext
1.
2.
3.
4.
5.
SELECT id
  FROM NEW TABLE(INSERT INTO T(id, c1) 
                  VALUES (DEFAULT, :hv1), 
                         (DEFAULT, :hv2))
  ORDER BY INPUT SEQUENCE 

Common Table Expressions
Вложенные запросы (Nested queries)
Объединения (Joins)
Множество UDI
Решают конфликты read/write, write/write
Код: plaintext
1.
2.
3.
4.
5.
WITH v1 AS (SELECT c1 
              FROM NEW TABLE(UPDATE T SET c1 = -c1)),
     v2 AS (SELECT COUNT(*)
              FROM OLD TABLE(DELETE FROM T))
SELECT * FROM v1, v2, T

Пример повышение сотрудника в должности

2 Таблицы Emp и Mgr
Повышение
-Удалить из сотрудников (Delete Emp)
-Вставить в таблицу менеджеры (Insert Mgr)
-Увеличить зарплату по умолчанию
-Назначить бонус через триггер
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
CREATE TABLE emp (eid    INT NOT NULL PRIMARY KEY, 
                  salary INT NOT NULL);

CREATE TABLE mgr (eid    INT NOT NULL PRIMARY KEY,
                  salary INT NOT NULL,
                  bonus  INT NOT NULL);

CREATE TRIGGER iMgr 
 NO CASCADE BEFORE INSERT ON mgr 
 REFERENCING NEW AS n
 FOR EACH ROW
 SET n.bonus = coalesce(n.bonus, salary *  0 . 1 );

INSERT INTO emp VALUES( 1234 ,  50000 );

WITH del AS (SELECT salary, eid
               FROM OLD TABLE(DELETE FROM emp 
                               WHERE eid =  1234 )),
     ins AS (SELECT salary, old_salary, bonus, eid 
               FROM NEW TABLE (INSERT INTO 
                                mgr(eid, salary)  
                                INCLUDE (old_salary INT)
                                SELECT eid, 
                                       salary *  1 . 05 ,
                                       salary 
                                  FROM del))
SELECT eid, old_salary, salary, bonus FROM ins;
EID         OLD_SALARY  SALARY      BONUS      
----------- ----------- ----------- -----------
        1234         50000         52500          5250 

ACCESS PLAN
	Total Cost:  79 . 5758 

            TBSCAN 
              |
            SORT   
              |
            INSERT 
              |
            FILTER 
              |
            FILTER 
              |
            DELETE 
              |
            FETCH  
        .-----+-----.
      IXSCAN   TABLE: EMP
        |
  INDEX: EMP_PK

...
Рейтинг: 0 / 0
Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
    #34117046
OlegA67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все таки хотелось бы узнать ответ на второй вопрос, правильный синтаксис для запроса
Код: plaintext
1.
SELECT empno, salary, table2.name  FROM FINAL TABLE
(UPDATE employee SET salary = salary *  1 . 10  WHERE job = 'CLERK')
при условии объединения employee.kod= table2.kod, ну очень надо.
...
Рейтинг: 0 / 0
Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
    #34117100
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
with T as (
SELECT empno, salary, kod
FROM FINAL TABLE
(UPDATE employee SET salary = salary *  1 . 10  WHERE job = 'CLERK')
)
SELECT T.*, T2.NAME
FROM T, TABLE2 T2
WHERE T.kod=T2.kod;
...
Рейтинг: 0 / 0
Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
    #34118954
OlegA67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо Mark'у за пример.
Теперь по поводу первого вопроса, так и не получилось сделать запрос
Код: plaintext
1.
SELECT empno, salary FROM FINAL TABLE
(UPDATE employee SET salary = salary *  1 . 10  WHERE job = 'CLERK')
при наличие тригера UPDATE на столбец salary. Во всех приведенных выше примерах момент действия триггера UPDATE стоит BEFORE , а у меня AFTER.
Может ли из-за этого идти ошибка. Назначение тригера, после обновление определенных полей , записать в соответсвующие поля переменные USER и CURRENT TIMESTAMP
...
Рейтинг: 0 / 0
Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
    #34119231
nkulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему тогда тебе не воспользоваться не FINAL TABLE, а NEW TABLE ?
...
Рейтинг: 0 / 0
Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
    #34119403
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если единственное назначение триггера это
OlegA67после обновление определенных полей , записать в соответсвующие поля переменные USER и CURRENT TIMESTAMP, то это лучше делать в BEFORE триггере.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Можно ли модифицировать данные SQL запросом, который начинается с оператора SELECT ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]