powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Какой эквивалент DBINFO("sqlca.sqlerrd1") в DB2?
4 сообщений из 4, страница 1 из 1
Какой эквивалент DBINFO("sqlca.sqlerrd1") в DB2?
    #32996948
shtorm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!!!!!
Informix: DBINFO("sqlca.sqlerrd1") { последний serial, вставленный в таблицу}Вопрос: Как сделать тоже самое в DB2?....Заранее большое спасибо!!!!!
...
Рейтинг: 0 / 0
Какой эквивалент DBINFO("sqlca.sqlerrd1") в DB2?
    #32997003
nkulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в принципе в DB2 8.1 - 8.2 можно в запросе получить identity из insert

Простенькая задачка повышение сотрудника в должности
1) Удалить из сотрудников (Delete Emp)
2) Вставить в таблицу менеджеры (Insert Mgr)
3) Увеличить зарплату по умолчанию
4) Назначить бонус через триггер


Код: 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.
53.
54.
55.
56.
drop trigger imgr;
drop table emps;
drop table mgr;

CREATE TABLE emps (
eid    INTEGER  NOT NULL  GENERATED ALWAYS AS IDENTITY (START WITH  0 , INCREMENT BY  1 , NO CACHE ) PRIMARY KEY, 
salary INT NOT NULL);

CREATE TABLE mgr (eid  INTEGER  NOT NULL  GENERATED ALWAYS AS IDENTITY (START WITH  0 , INCREMENT BY  1 , NO CACHE ) PRIMARY KEY,
                  salary INT NOT NULL,
                  bonus  INT NOT NULL);

insert into emps (salary) values ( 10000 ),( 50000 );

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 );
 
 WITH del AS (SELECT salary, eid
               FROM OLD TABLE(DELETE FROM emps WHERE eid =  1 )),
     ins AS (SELECT salary, old_salary, bonus, eid 
               FROM NEW TABLE (INSERT INTO 
                                mgr(salary)  
                                INCLUDE (old_salary INT) --включаем старую зарплату в выборку
                                SELECT salary *  1 . 05  ,
                                           salary --старая зарплата
                                  FROM del))
SELECT eid, old_salary, salary, bonus FROM ins;

--То есть в одном запросе ты получил данные из delete и из Insert.
--План очень эффективный ибо блокировок мало и они долго не держатся

EID         OLD_SALARY  SALARY      BONUS
----------- ----------- ----------- -----------
           0         10000         10500          1050 

  1  record(s) selected.

select * from emps;

EID         SALARY
----------- -----------
           0         50000 

   1  record(s) selected.

select * from mgr;

EID         SALARY      BONUS
----------- ----------- -----------
           0         10500          1050 

   1  record(s) selected.


План запроса

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Total Cost:  79 . 5758 

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

...
Рейтинг: 0 / 0
Какой эквивалент DBINFO("sqlca.sqlerrd1") в DB2?
    #32998204
PSasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чего то я не понял
как то не в тему вторая часть ответа
все же как получить identity из insert???
...
Рейтинг: 0 / 0
Какой эквивалент DBINFO("sqlca.sqlerrd1") в DB2?
    #32998259
nkulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверное пример сложноват. Надо по шагам объяснять.

CREATE TABLE emps (
eid INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 0, INCREMENT BY 1, NO CACHE ) PRIMARY KEY,
salary INT NOT NULL);

select eid, salary from new table (Insert into emps (salary) values(1000),(2000))

EID SALARY
----------- -----------
2 1000
3 2000
2 record(s) selected.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Какой эквивалент DBINFO("sqlca.sqlerrd1") в DB2?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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