Гость
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Какой эквивалент DBINFO("sqlca.sqlerrd1") в DB2? / 4 сообщений из 4, страница 1 из 1
04.04.2005, 19:46
    #32996948
shtorm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой эквивалент DBINFO("sqlca.sqlerrd1") в DB2?
Привет!!!!!
Informix: DBINFO("sqlca.sqlerrd1") { последний serial, вставленный в таблицу}Вопрос: Как сделать тоже самое в DB2?....Заранее большое спасибо!!!!!
...
Рейтинг: 0 / 0
04.04.2005, 20:51
    #32997003
nkulikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой эквивалент DBINFO("sqlca.sqlerrd1") в DB2?
в принципе в 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
05.04.2005, 14:35
    #32998204
PSasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой эквивалент DBINFO("sqlca.sqlerrd1") в DB2?
чего то я не понял
как то не в тему вторая часть ответа
все же как получить identity из insert???
...
Рейтинг: 0 / 0
05.04.2005, 14:51
    #32998259
nkulikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой эквивалент DBINFO("sqlca.sqlerrd1") в DB2?
Наверное пример сложноват. Надо по шагам объяснять.

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
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Какой эквивалент DBINFO("sqlca.sqlerrd1") в DB2? / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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