powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Чем MS SQL Server хуже Oracle Database?
25 сообщений из 271, страница 8 из 11
Чем MS SQL Server хуже Oracle Database?
    #37717148
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL Bigot ты :решается через СТЕ(лишние телодвижения, которые ты почему-то не хочешь счесть лишними)
--------
Финиш :)

Какое-такое CTE?!

И... Букв много. Желательно, таки пример кода увидеть...
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37717673
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ApexApexпропущено...

Я тебе даже больше скажу, эта та самая, которая DDL откатывает только вместе с базой.
Хотя нет, вру, во втором релизе допилили таки .
Ага. Т.е. кроме flashback database добавили еще и flashback table?
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718357
SQL Bigot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinКакое-такое CTE?!
И... Букв много. Желательно, таки пример кода увидеть...
"CTE" - это из другой ветки приплелось :) на его месте должно быть "CLR"

пример (тож букв хватает)
Код: plsql
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.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
...
 
SQL> CREATE TABLE employees_tst (employee_id NUMBER(6), salary NUMBER(8,2));
 
Table created
 
SQL> insert into employees_tst(employee_id,salary) select level,level*100 from dual connect by level < 10;
 
9 rows inserted
 
SQL> select * from employees_tst;
 
EMPLOYEE_ID     SALARY
----------- ----------
          1     100,00
          2     200,00
          3     300,00
          4     400,00
          5     500,00
          6     600,00
          7     700,00
          8     800,00
          9     900,00
 
9 rows selected
 
SQL> commit;
 
Commit complete
 
SQL> CREATE TABLE emp_audit_tst( emp_audit_id NUMBER(6), up_date DATE,
  2                           new_sal NUMBER(8,2), old_sal NUMBER(8,2) );
 
Table created
 
SQL> 
SQL> CREATE TRIGGER audit_sal_tst
  2    BEFORE UPDATE OF salary ON employees_tst
  3    FOR EACH ROW
  4  DECLARE
  5    PRAGMA AUTONOMOUS_TRANSACTION;
  6  BEGIN
  7    INSERT INTO emp_audit_tst
  8    VALUES
  9      (:old.employee_id
 10      ,SYSDATE
 11      ,:new.salary
 12      ,:old.salary);
 13    COMMIT;
 14  END;
 15  /
 
Trigger created
 
SQL> update employees_tst set salary = salary/(7-employee_id);
 
update employees_tst set salary = salary/(7-employee_id)
 
ORA-01476: divisor is equal to zero
 
SQL> commit;
 
Commit complete
 
SQL> select * from employees_tst;
 
EMPLOYEE_ID     SALARY
----------- ----------
          1     100,00
          2     200,00
          3     300,00
          4     400,00
          5     500,00
          6     600,00
          7     700,00
          8     800,00
          9     900,00
 
9 rows selected
 
SQL> select * from emp_audit_tst;
 
EMP_AUDIT_ID UP_DATE        NEW_SAL    OLD_SAL
------------ ----------- ---------- ----------
           1 22.03.2012       16,67     100,00
           2 22.03.2012       40,00     200,00
           3 22.03.2012       75,00     300,00
           4 22.03.2012      133,33     400,00
           5 22.03.2012      250,00     500,00
           6 22.03.2012      600,00     600,00
 
6 rows selected

...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718407
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL Bigot,

На мой взгляд, абсолютно бесполезный (с практической точки зрения) пример. В таблице ничего не изменилось. В аудит папали не все записи, которые пытались проапдейтить, а только ДО ошибочной записи. Наличие в таблицы аудита значений в поле NEW_SAL, опять же не имеет никакой смысловой нагрузки и не возможно понять, что и зачем пытались сделать с таблицей и почему не сделалось

ЗЫ. Автономные транзакции в Oracle - это круто!
ЗЫЗЫ. Тема row level триггера осталась не расскрыта, IMHO.
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718466
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinЗЫЗЫ. Тема row level триггера осталась не расскрыта, IMHO.
Ну ради порядка было бы интересно увидеть реализацию на MSSQL следующего абстрактного примера:

Код: plsql
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.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
SQL> create or replace package rl as
  2    procedure init;
  3    function get return integer;
  4  end;
  5  /
 
Package created
 
SQL> create or replace package body rl as
  2    cnt integer;
  3    procedure init as begin cnt := 0; end;
  4    function get return integer as begin cnt := cnt + 1; return cnt; end;
  5  end;
  6  /
 
Package body created
 
SQL> create table rldata as select rownum id, '     ' data, cast(null as number)
  2  n from dual connect by level <= 10;
 
Table created
 
SQL> create trigger rldata_bu before update on rldata
  2  begin
  3    rl.init;
  4  end;
  5  /
 
Trigger created
 
SQL> create trigger rldata_bur before update on rldata for each row
  2  begin
  3    :new.n := rl.get;
  4  end;
  5  /
 
Trigger created
 
SQL> select * from rldata;
 
        ID DATA                          N
---------- -------------------- ----------
         1                      
         2                      
         3                      
         4                      
         5                      
         6                      
         7                      
         8                      
         9                      
        10                      
 
10 rows selected
 
SQL> update rldata set data = '  x  ' where mod(id, 2) = 0;
 
5 rows updated
 
SQL> select * from rldata;
 
        ID DATA                          N
---------- -------------------- ----------
         1                      
         2   x                           1
         3                      
         4   x                           2
         5                      
         6   x                           3
         7                      
         8   x                           4
         9                      
        10   x                           5
 
10 rows selected
 
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718507
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Небольшое уточнение. Нужен конечный результат (пронумеровать проапдейченные записи)?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        ID DATA                          N
---------- -------------------- ----------
         1                      
         2   x                           1
         3                      
         4   x                           2
         5                      
         6   x                           3
         7                      
         8   x                           4
         9                      
        10   x                           5
 
10 rows selected
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718519
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin, смотря что считать конечным результатом. Например

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> update (select * from rldata order by dbms_random.value()) set data =  '  x  ';
 
10 rows updated
 
SQL> select * from rldata;
 
        ID DATA                          N
---------- -------------------- ----------
         1   x                           6
         2   x                           1
         3   x                           8
         4   x                           7
         5   x                           5
         6   x                           4
         7   x                          10
         8   x                           3
         9   x                           2
        10   x                           9
 
10 rows selected
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718536
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinsoftwarer,

Небольшое уточнение. Нужен конечный результат (пронумеровать проапдейченные записи)?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        ID DATA                          N
---------- -------------------- ----------
         1                      
         2   x                           1
         3                      
         4   x                           2
         5                      
         6   x                           3
         7                      
         8   x                           4
         9                      
        10   x                           5
 
10 rows selected
тут использована переменная пакета, т.е. нечто записывается в переменную и она живет во время жизни сессии
в MS SQL для этого надо будет как-то изощряться
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718542
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperтут использована переменная пакета, т.е. нечто записывается в переменную и она живет во время жизни сессии
в MS SQL для этого надо будет как-то изощряться
Насколько я понимаю, в MS SQL для этого будет достаточно локальной переменной в триггере.
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718567
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperтут использована переменная пакета, т.е. нечто записывается в переменную и она живет во время жизни сессии
в MS SQL для этого надо будет как-то изощряться

А зачем?

Код: sql
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.
USE tempdb
GO

CREATE TABLE T1(
ID int NOT NULL identity(1, 1),
DATA char(5) NULL,
N int NULL
)
GO

INSERT T1 DEFAULT VALUES
GO 10

CREATE TRIGGER UT_T1 ON T1 
FOR UPDATE
AS
IF TRIGGER_NESTLEVEL(@@procid) = 1 
WITH CTE(ID, RN)
AS
(
SELECT
  i.ID,
  ROW_NUMBER() OVER(ORDER BY i.ID) RN
FROM
  inserted i
)
UPDATE
  T
SET
  N = C.RN
FROM
  T1 T
  INNER JOIN CTE C ON
  T.ID = C.ID
GO

UPDATE T1 SET DATA = '  x  ' WHERE ID % 2 = 0
GO 
SELECT
  *
FROM
  T1
GO

DROP TABLE T1



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
ID          DATA  N
----------- ----- -----------
1           NULL  NULL
2             x   1
3           NULL  NULL
4             x   2
5           NULL  NULL
6             x   3
7           NULL  NULL
8             x   4
9           NULL  NULL
10            x   5

(10 row(s) affected)
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718580
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerSergSuperтут использована переменная пакета, т.е. нечто записывается в переменную и она живет во время жизни сессии
в MS SQL для этого надо будет как-то изощряться
Насколько я понимаю, в MS SQL для этого будет достаточно локальной переменной в триггере.ну в частном случае можно
если функция get имела бы какую-то логику - то уже не так просто
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718581
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin, тут соль во втором примере из написанных мной. Я не знаю способа это сделать в MS, хотя и не собираюсь утверждать, что сделать нельзя.
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718586
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperесли функция get имела бы какую-то логику - то уже не так просто
Логика функции get только в том, что каждое новое значение зависит от предыстории. Я не имел в виду хвалиться пакетами, это просто способ передать контекст между вызовами row level триггера.
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718589
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinSergSuperтут использована переменная пакета, т.е. нечто записывается в переменную и она живет во время жизни сессии
в MS SQL для этого надо будет как-то изощряться

А зачем?

ну а если бы переменная не обнулялась и надо было бы считать сколько раз пользователь выполнил вызов функции?
например можно вести статистику сколько какой кусок кода работал времени
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718594
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerpkarklin, тут соль во втором примере из написанных мной. Я не знаю способа это сделать в MS, хотя и не собираюсь утверждать, что сделать нельзя.

Я подумаю, пока буду идти домой...
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718605
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperнапример можно вести статистику сколько какой кусок кода работал времени

Гм... При необходимости веду такую статистику, фиксируя моменты отработку кода внутри хп\триггера в таблице AppLog. Триггер только не пойму здесь зачем и запоминание предыдущего значения?
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718617
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinГм... При необходимости веду такую статистику, фиксируя моменты отработку кода внутри хп\триггера в таблице AppLog. с переменной-то и проще и быстрее

pkarklin Триггер только не пойму здесь зачем и запоминание предыдущего значения?я неправильно понял суть примера, softwarer хотел узнать как передавать данные между двумя триггерами на одной таблицу
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718654
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyApexпропущено...

Хотя нет, вру, во втором релизе допилили таки .
Ага. Т.е. кроме flashback database добавили еще и flashback table?
Нет, flashback table было и до этого. Просто раньше flashback table не умело откатывать DDL, поэтому нужно было откатывать всю базу целиком. А в 11.2 допилили.
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718657
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Apexlockyпропущено...

Ага. Т.е. кроме flashback database добавили еще и flashback table?
Нет, flashback table было и до этого. Просто раньше flashback table не умело откатывать DDL, поэтому нужно было откатывать всю базу целиком. А в 11.2 допилили.
Остается с нетерпением ждать flashback view, flashback procedure/function, flashback package
Ну и управления всей этой лабудой не только из rman, но и из pl/sql

ps и не только в EE, но и в SE1/XE
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718683
SQL Bigot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyОстается с нетерпением ждать flashback view, flashback procedure/function, flashback package

И зачем ждать: в правильной СУБД это решается одним DDL триггером :)
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718686
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL BigotlockyОстается с нетерпением ждать flashback view, flashback procedure/function, flashback package

И зачем ждать: в правильной СУБД это решается одним DDL триггером :)
??
пример - можно?
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718755
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже если я напишу так:

Код: sql
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.
USE tempdb
GO

CREATE TABLE T1(
ID int NOT NULL identity(1, 1),
DATA char(5) NULL,
N int NULL
)
GO

INSERT T1 DEFAULT VALUES
GO 10

CREATE TRIGGER UT_T1 ON T1 
FOR UPDATE
AS
DECLARE @i int
SET @i = 0
IF TRIGGER_NESTLEVEL(@@procid) = 1  
UPDATE
  T
SET
  @i = N = @i + 1
FROM
  T1 T
  INNER JOIN inserted i ON
  T.ID = i.ID
GO

UPDATE T SET DATA = '  x  ' FROM (SELECT TOP 100 PERCENT * FROM T1 ORDER BY NEWID()) T
GO 
SELECT
  *
FROM
  T1
GO

DROP TABLE T1



или даже курсор в триггере нарисую, результат (рандомная нумерация, заданная "снаружи") не будет достигнута. Проблема в том, что UPDATE в MS SQL не может быть "упорядочен снаружи" и этот порядок соблюден в триггере.
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718787
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperкак передавать данные между двумя триггерами на одной таблицу

В MS SQL (не прибегая к доп. таблицам) это можно сделать через CONTEXT_INFO сессии. Но там всего 128 байт "места".
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718881
SQL Bigot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyпример - можно?

http://psoug.org/reference/ddl_trigger.html

На пальцах:
На BEFORE ALTER уровня базы данных тащишь метаданные объекта(ов) посредством DBMS_METADATA.GET_DDL и сохраняешь в журнале с датой.
Устриц ел, есличо.
...
Рейтинг: 0 / 0
Чем MS SQL Server хуже Oracle Database?
    #37718908
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL Bigotlockyпример - можно?

http://psoug.org/reference/ddl_trigger.html

На пальцах:
На BEFORE ALTER уровня базы данных тащишь метаданные объекта(ов) посредством DBMS_METADATA.GET_DDL и сохраняешь в журнале с датой.
Устриц ел, есличо.
Ну, на безрыбьи - и так можно.
Хотя чем это отличается от "перед апргрейдом сделайте скрипт объектов, и в случае проблем - накатите старые варианты" - не вижу.
Геморное решение.
...
Рейтинг: 0 / 0
25 сообщений из 271, страница 8 из 11
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Чем MS SQL Server хуже Oracle Database?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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