Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 34 35 36 37 38 39 [40] 41 42 43   вперед  Ctrl
 Re: Курилка  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5956
Валерий Юринский
andreymx
пропущено...
2.
select *
  from tavble
 where value !== 5


Это и так эквивалентно:
select *
  from tavble
 where value != 5


Строки, где value IS NULL выбраны не будут, поскольку "null не равняется рядовому значению".
(Как вы знаете, вычисление NULL != 5 не дает в результате значение TRUE)

Приведите пример удобного применения оператора '=='
В том то и дело, что andreymx хочет чтобы строки с value IS NULL были выбраны в случае использования этого нового оператора '!==', что очень напоминает '==' vs '===' в Javascript или '==' vs '.equals()' в Java (Physical equality/Structural equality).
Т.е. насколько я понимаю в отличие от = они должны работать так:
===True False Null
Truetruefalsefalse
Falsefalsetruefalse
Nullfalsefalsetrue

!==True False Null
Truefalsetruetrue
Falsetruefalsetrue
Nulltruetruefalse
2 окт 20, 20:44    [22208299]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Валерий Юринский
Member

Откуда: Москва, "ФОРС Дистрибуция"
Сообщений: 1298
xtender
В том то и дело, что andreymx хочет чтобы строки с value IS NULL были выбраны в случае использования этого нового оператора '!==',
. . .

Это противоречит начальному посту
andreymx
я бы всё-таки добавил НОВЫЕ операторы сравнения, скажем, == и !==
чтобы null равнялся null
и null не равнялся рядовому значению

Поддождём, что скажет автор.
2 окт 20, 21:03    [22208309]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
graycode
Member

Откуда:
Сообщений: 433
xtender
что очень напоминает '==' vs '===' в Javascript

Чем напоминает? В JS '===' означает, что типы сравниваемых значений должны быть одинаковы.
2 окт 20, 21:06    [22208311]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
проходил мимо...
Member

Откуда: от верблюда
Сообщений: 1187
Валерий Юринский
Поддождём, что скажет автор.

чё ждать-то?
автор, вроде, явно сказал, что поведение decode(value,5,1,0)=0 его устраивает. проблема в том, что decode - inside a SQL statement only.
т.е. value !== 5 должно вернуть и строки, где value is null
2 окт 20, 21:13    [22208313]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
graycode
Member

Откуда:
Сообщений: 433
andreymx
в мсскл пустая строка и налл - разные, что весьма подходит под требование

Так то оно так, но есть другие приколы
select *
from (
              select '1', '2'
    union all select '2', null
    union all select null, '3'
    union all select null, ''
    union all select null, null
) as src (a, b)
where a != b

результат ожидаемый - одна строка со значениями (1, 2). Оракл даст такой же результат.

CREATE TABLE dbo.t(
    a varchar,
    b varchar,
    constraint ck_ab check (a != b)
);

insert into dbo.t
select *
from (
              select '1', '2'
    union all select '2', null
    union all select null, '3'
    union all select null, ''
    union all select null, null
) as src (a, b)

Результат не очень ожидаемый, добавлено пять строк ...
2 окт 20, 22:02    [22208323]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Валерий Юринский
Member

Откуда: Москва, "ФОРС Дистрибуция"
Сообщений: 1298
проходил мимо...
Валерий Юринский
Поддождём, что скажет автор.

чё ждать-то?
автор, вроде, явно сказал, что поведение decode(value,5,1,0)=0 его устраивает. проблема в том, что decode - inside a SQL statement only.
т.е. value !== 5 должно вернуть и строки, где value is null

ОК.
Разобрался :-)

New == operator Result Old = operator Result
5 == 5 TRUE 5 = 5 TRUE
1 == 5 FALSE 1 = 5 FALSE
NULL == 5 FALSE NULL = 5 UNKNOWN
NULL == NULL TRUE NULL = NULL UNKNOWN
5 !== 5 FALSE 5 != 5 FALSE
1 !== 5 TRUE 1 != 5 TRUE
NULL !== 5 TRUE NULL != 5 UNKNOWN
NULL !== NULL FALSE NULL != NULL UNKNOWN

Всё так?
Автор подтвердите

И примеры приводите, чтобы все всё поняли.
Даже я!
:-)

Но лучше для обозначения оператора лучше было бы использовать что-то вроде
<==> и <<>>
Это было бы нагляднее, чем
== и !==
2 окт 20, 22:07    [22208325]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5956
graycode,

И в oracle и в ms sql server работает одинаково согласно ansi sql стандарту.
http://msdn.microsoft.com/en-us/library/ms188258.aspx
автор
CHECK constraints reject values that evaluate to FALSE. Because null values evaluate to UNKNOWN, their presence in expressions may override a constraint.

https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/constraint.html
автор
Check Constraints

A check constraint lets you specify a condition that each row in the table must satisfy. To satisfy the constraint, each row in the table must make the condition either TRUE or unknown (due to a null).
3 окт 20, 00:29    [22208345]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5956
graycode
xtender
что очень напоминает '==' vs '===' в Javascript

Чем напоминает? В JS '===' означает, что типы сравниваемых значений должны быть одинаковы.
про это я тоже думал, возможно в оракле действительно и строготипизированная проверка пригодилась бы, хотя бы для того, чтобы меньше потом вопросов было с проблемами неявной конвертации. Но, вообще, я имел ввиду другое сходство:
console.log(false !==  undefined);

var x
console.log(undefined === x);
3 окт 20, 00:56    [22208352]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
graycode
Member

Откуда:
Сообщений: 433
xtender,

Странно как это я не наступал на такие грабли или наступал но настолько давно что уже забыл, не понятно из каких побуждений так сделано, было бы логично, если одинаковое условие фильтрует записи одинаково независимо от того запрос это или ограничение.

null и undefined JS не имеют прямых аналогов в Оракле, в частности undefined это не просто значение выражающее неопределенность, а еще и самостоятельный тип, поэтому и работает undefined === x, неинициализированная переменная имеет тип и значение undefined.
3 окт 20, 01:32    [22208362]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10337
От скуки:

with src (a, b) as (
              select 1, 1 from dual
    union all select 1, 2 from dual
    union all select 1, null from dual
    union all select null, 1 from dual
    union all select null, null from dual
)
select rownum,
       src.*
from src
where sys.ku$_objnumset(a) multiset except sys.ku$_objnumset(b) = sys.ku$_objnumset()
/

    ROWNUM          A          B
---------- ---------- ----------
         1          1          1
         2

SQL>



set serveroutput on
declare
    v_a number;
    v_b number;
begin
    v_a := 1;
    v_b := 1;
    if sys.ku$_objnumset(v_a) multiset except sys.ku$_objnumset(v_b) = sys.ku$_objnumset()
      then
        dbms_output.put_line('1 = 1');
      else
        dbms_output.put_line('1 != 1');
    end if;
    v_a := 1;
    v_b := 2;
    if sys.ku$_objnumset(v_a) multiset except sys.ku$_objnumset(v_b) = sys.ku$_objnumset()
      then
        dbms_output.put_line('1 = 2');
      else
        dbms_output.put_line('1 != 2');
    end if;
    v_a := 1;
    v_b := null;
    if sys.ku$_objnumset(v_a) multiset except sys.ku$_objnumset(v_b) = sys.ku$_objnumset()
      then
        dbms_output.put_line('1 = null');
      else
        dbms_output.put_line('1 != null');
    end if;
    v_a := null;
    v_b := 1;
    if sys.ku$_objnumset(v_a) multiset except sys.ku$_objnumset(v_b) = sys.ku$_objnumset()
      then
        dbms_output.put_line('null = 1');
      else
        dbms_output.put_line('null != 1');
    end if;
    v_a := null;
    v_b := null;
    if sys.ku$_objnumset(v_a) multiset except sys.ku$_objnumset(v_b) = sys.ku$_objnumset()
      then
        dbms_output.put_line('null = null');
      else
        dbms_output.put_line('null != null');
    end if;
end;
/
1 = 1
1 != 2
1 != null
null != 1
null = null

PL/SQL procedure successfully completed.

SQL>


SY.
3 окт 20, 02:11    [22208368]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5956
SY
sys.ku$_objnumset
кстати, он теперь TABLE OF SYS.KU$_OBJNUM, который в свою очередь object (objnum number)
SQL> select * from table(sys.ku$_objnumset(sys.ku$_objnum(1)));

   OBJ_NUM
----------
         1
3 окт 20, 03:26    [22208371]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10337
xtender
кстати


Лень было создавать свой чтобы не зависеть от версий.

SY.
3 окт 20, 14:00    [22208458]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
MazoHist
Member

Откуда:
Сообщений: 154
в тему вопросов для собеседования: может ли простой оператор select (без for update и dblink) заблокировать выполнение оператора insert?
3 окт 20, 21:41    [22208587]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
istrebitel
Member

Откуда:
Сообщений: 151
Оператора сравнения на равенство/неравенство включая NULL не хватает для поиска изменённых данных для журналирования.
Приходиться писать простыню
+
<<lpModified>>
	FOR tmp IN (
				SELECT
					src.CNTRNR newCNTRNR, src.MAINNR newMAINNR, src.SHORTN newSHORTN, src.FORM_ORG newFORM_ORG, src.FULLNM newFULLNM
					, src.M_REGION newM_REGION, src.M_POST_CODE1 newM_POST_CODE1, src.M_CITY1 newM_CITY1, src.M_STREET newM_STREET
					, src.M_HOUSE_NUM1 newM_HOUSE_NUM1, src.M_HOUSE_NUM2 newM_HOUSE_NUM2, src.M_STREET4 newM_STREET4, src.M_STREET5 newM_STREET5
					, src.P_REGION newP_REGION, src.P_POST_CODE1 newP_POST_CODE1, src.P_CITY1 newP_CITY1, src.P_STREET newP_STREET
					, src.P_HOUSE_NUM1 newP_HOUSE_NUM1, src.P_HOUSE_NUM2 newP_HOUSE_NUM2, src.P_STREET4 newP_STREET4, src.P_STREET5 newP_STREET5
					, src.PHONES newPHONES, src.KPP newKPP, src.INN newINN, src.BANKN newBANKN, src.BIK newBIK, src.BANK_ACC newBANK_ACC
					, src.CORR_ACC newCORR_ACC, src.BANKADR newBANKADR, src.TYPE_ORG newTYPE_ORG, src.COUNTRY newCOUNTRY, src.FULLNM_EN newFULLNM_EN
					, src.M_REGION_EN newM_REGION_EN, src.M_POST_CODE1_EN newM_POST_CODE1_EN, src.M_CITY1_EN newM_CITY1_EN
					, src.M_STREET_EN newM_STREET_EN, src.M_HOUSE_NUM1_EN newM_HOUSE_NUM1_EN, src.M_HOUSE_NUM2_EN newM_HOUSE_NUM2_EN
					, src.VBUND newVBUND, src.ID newID, src.ACTION newACTION, src.NUMB_1C newNUMB_1C, src.NAME_CO newNAME_CO, src.NAME4 newNAME4
					, src.SORT2 newSORT2, src.STR_SUPPL1 newSTR_SUPPL1, src.STR_SUPPL2 newSTR_SUPPL2, src.P_NAME1 newP_NAME1, src.P_NAME2 newP_NAME2
					, src.P_NAME3 newP_NAME3, src.P_NAME4 newP_NAME4, src.SHORTNAME newSHORTNAME, src.HOME_CITY newHOME_CITY, src.OKATO newOKATO
					, src.OKPO newOKPO, src.OGRN newOGRN

					, dst.CNTRNR oldCNTRNR
					, COUNT(*) over() ROWCOUNT
					, ROWNUM
				FROM
					sl_load_contragent_list src
					LEFT OUTER JOIN sl_contragent dst ON dst.cntrnr = src.cntrnr
				WHERE
					dst.MAINNR <> src.MAINNR OR dst.MAINNR IS NULL AND src.MAINNR IS NOT NULL OR dst.MAINNR IS NOT NULL AND src.MAINNR IS NULL
					OR dst.SHORTN <> src.SHORTN OR dst.SHORTN IS NULL AND src.SHORTN IS NOT NULL OR dst.SHORTN IS NOT NULL AND src.SHORTN IS NULL
					OR dst.FORM_ORG <> src.FORM_ORG OR dst.FORM_ORG IS NULL AND src.FORM_ORG IS NOT NULL OR dst.FORM_ORG IS NOT NULL AND src.FORM_ORG IS NULL
					OR dst.FULLNM <> src.FULLNM OR dst.FULLNM IS NULL AND src.FULLNM IS NOT NULL OR dst.FULLNM IS NOT NULL AND src.FULLNM IS NULL
					OR dst.M_REGION <> src.M_REGION OR dst.M_REGION IS NULL AND src.M_REGION IS NOT NULL OR dst.M_REGION IS NOT NULL AND src.M_REGION IS NULL
					OR dst.M_POST_CODE1 <> src.M_POST_CODE1 OR dst.M_POST_CODE1 IS NULL AND src.M_POST_CODE1 IS NOT NULL OR dst.M_POST_CODE1 IS NOT NULL AND src.M_POST_CODE1 IS NULL
					OR dst.M_CITY1 <> src.M_CITY1 OR dst.M_CITY1 IS NULL AND src.M_CITY1 IS NOT NULL OR dst.M_CITY1 IS NOT NULL AND src.M_CITY1 IS NULL
					OR dst.M_STREET <> src.M_STREET OR dst.M_STREET IS NULL AND src.M_STREET IS NOT NULL OR dst.M_STREET IS NOT NULL AND src.M_STREET IS NULL
					OR dst.M_HOUSE_NUM1 <> src.M_HOUSE_NUM1 OR dst.M_HOUSE_NUM1 IS NULL AND src.M_HOUSE_NUM1 IS NOT NULL OR dst.M_HOUSE_NUM1 IS NOT NULL AND src.M_HOUSE_NUM1 IS NULL
					OR dst.M_HOUSE_NUM2 <> src.M_HOUSE_NUM2 OR dst.M_HOUSE_NUM2 IS NULL AND src.M_HOUSE_NUM2 IS NOT NULL OR dst.M_HOUSE_NUM2 IS NOT NULL AND src.M_HOUSE_NUM2 IS NULL
					OR dst.M_STREET4 <> src.M_STREET4 OR dst.M_STREET4 IS NULL AND src.M_STREET4 IS NOT NULL OR dst.M_STREET4 IS NOT NULL AND src.M_STREET4 IS NULL
					OR dst.M_STREET5 <> src.M_STREET5 OR dst.M_STREET5 IS NULL AND src.M_STREET5 IS NOT NULL OR dst.M_STREET5 IS NOT NULL AND src.M_STREET5 IS NULL
					OR dst.P_REGION <> src.P_REGION OR dst.P_REGION IS NULL AND src.P_REGION IS NOT NULL OR dst.P_REGION IS NOT NULL AND src.P_REGION IS NULL
					OR dst.P_POST_CODE1 <> src.P_POST_CODE1 OR dst.P_POST_CODE1 IS NULL AND src.P_POST_CODE1 IS NOT NULL OR dst.P_POST_CODE1 IS NOT NULL AND src.P_POST_CODE1 IS NULL
					OR dst.P_CITY1 <> src.P_CITY1 OR dst.P_CITY1 IS NULL AND src.P_CITY1 IS NOT NULL OR dst.P_CITY1 IS NOT NULL AND src.P_CITY1 IS NULL
					OR dst.P_STREET <> src.P_STREET OR dst.P_STREET IS NULL AND src.P_STREET IS NOT NULL OR dst.P_STREET IS NOT NULL AND src.P_STREET IS NULL
					OR dst.P_HOUSE_NUM1 <> src.P_HOUSE_NUM1 OR dst.P_HOUSE_NUM1 IS NULL AND src.P_HOUSE_NUM1 IS NOT NULL OR dst.P_HOUSE_NUM1 IS NOT NULL AND src.P_HOUSE_NUM1 IS NULL
					OR dst.P_HOUSE_NUM2 <> src.P_HOUSE_NUM2 OR dst.P_HOUSE_NUM2 IS NULL AND src.P_HOUSE_NUM2 IS NOT NULL OR dst.P_HOUSE_NUM2 IS NOT NULL AND src.P_HOUSE_NUM2 IS NULL
					OR dst.P_STREET4 <> src.P_STREET4 OR dst.P_STREET4 IS NULL AND src.P_STREET4 IS NOT NULL OR dst.P_STREET4 IS NOT NULL AND src.P_STREET4 IS NULL
					OR dst.P_STREET5 <> src.P_STREET5 OR dst.P_STREET5 IS NULL AND src.P_STREET5 IS NOT NULL OR dst.P_STREET5 IS NOT NULL AND src.P_STREET5 IS NULL
					OR dst.PHONES <> src.PHONES OR dst.PHONES IS NULL AND src.PHONES IS NOT NULL OR dst.PHONES IS NOT NULL AND src.PHONES IS NULL
					OR dst.KPP <> src.KPP OR dst.KPP IS NULL AND src.KPP IS NOT NULL OR dst.KPP IS NOT NULL AND src.KPP IS NULL
					OR dst.INN <> src.INN OR dst.INN IS NULL AND src.INN IS NOT NULL OR dst.INN IS NOT NULL AND src.INN IS NULL
					OR dst.BANKN <> src.BANKN OR dst.BANKN IS NULL AND src.BANKN IS NOT NULL OR dst.BANKN IS NOT NULL AND src.BANKN IS NULL
					OR dst.BIK <> src.BIK OR dst.BIK IS NULL AND src.BIK IS NOT NULL OR dst.BIK IS NOT NULL AND src.BIK IS NULL
					OR dst.BANK_ACC <> src.BANK_ACC OR dst.BANK_ACC IS NULL AND src.BANK_ACC IS NOT NULL OR dst.BANK_ACC IS NOT NULL AND src.BANK_ACC IS NULL
					OR dst.CORR_ACC <> src.CORR_ACC OR dst.CORR_ACC IS NULL AND src.CORR_ACC IS NOT NULL OR dst.CORR_ACC IS NOT NULL AND src.CORR_ACC IS NULL
					OR dst.BANKADR <> src.BANKADR OR dst.BANKADR IS NULL AND src.BANKADR IS NOT NULL OR dst.BANKADR IS NOT NULL AND src.BANKADR IS NULL
					OR dst.TYPE_ORG <> src.TYPE_ORG OR dst.TYPE_ORG IS NULL AND src.TYPE_ORG IS NOT NULL OR dst.TYPE_ORG IS NOT NULL AND src.TYPE_ORG IS NULL
					OR dst.COUNTRY <> src.COUNTRY OR dst.COUNTRY IS NULL AND src.COUNTRY IS NOT NULL OR dst.COUNTRY IS NOT NULL AND src.COUNTRY IS NULL
					OR dst.FULLNM_EN <> src.FULLNM_EN OR dst.FULLNM_EN IS NULL AND src.FULLNM_EN IS NOT NULL OR dst.FULLNM_EN IS NOT NULL AND src.FULLNM_EN IS NULL
					OR dst.M_REGION_EN <> src.M_REGION_EN OR dst.M_REGION_EN IS NULL AND src.M_REGION_EN IS NOT NULL OR dst.M_REGION_EN IS NOT NULL AND src.M_REGION_EN IS NULL
					OR dst.M_POST_CODE1_EN <> src.M_POST_CODE1_EN OR dst.M_POST_CODE1_EN IS NULL AND src.M_POST_CODE1_EN IS NOT NULL OR dst.M_POST_CODE1_EN IS NOT NULL AND src.M_POST_CODE1_EN IS NULL
					OR dst.M_CITY1_EN <> src.M_CITY1_EN OR dst.M_CITY1_EN IS NULL AND src.M_CITY1_EN IS NOT NULL OR dst.M_CITY1_EN IS NOT NULL AND src.M_CITY1_EN IS NULL
					OR dst.M_STREET_EN <> src.M_STREET_EN OR dst.M_STREET_EN IS NULL AND src.M_STREET_EN IS NOT NULL OR dst.M_STREET_EN IS NOT NULL AND src.M_STREET_EN IS NULL
					OR dst.M_HOUSE_NUM1_EN <> src.M_HOUSE_NUM1_EN OR dst.M_HOUSE_NUM1_EN IS NULL AND src.M_HOUSE_NUM1_EN IS NOT NULL OR dst.M_HOUSE_NUM1_EN IS NOT NULL AND src.M_HOUSE_NUM1_EN IS NULL
					OR dst.M_HOUSE_NUM2_EN <> src.M_HOUSE_NUM2_EN OR dst.M_HOUSE_NUM2_EN IS NULL AND src.M_HOUSE_NUM2_EN IS NOT NULL OR dst.M_HOUSE_NUM2_EN IS NOT NULL AND src.M_HOUSE_NUM2_EN IS NULL
					OR dst.VBUND <> src.VBUND OR dst.VBUND IS NULL AND src.VBUND IS NOT NULL OR dst.VBUND IS NOT NULL AND src.VBUND IS NULL
					--OR dst.ID <> src.ID OR dst.ID IS NULL AND src.ID IS NOT NULL OR dst.ID IS NOT NULL AND src.ID IS NULL
					OR dst.ACTION <> src.ACTION OR dst.ACTION IS NULL AND src.ACTION IS NOT NULL OR dst.ACTION IS NOT NULL AND src.ACTION IS NULL
					OR dst.NUMB_1C <> src.NUMB_1C OR dst.NUMB_1C IS NULL AND src.NUMB_1C IS NOT NULL OR dst.NUMB_1C IS NOT NULL AND src.NUMB_1C IS NULL
					OR dst.NAME_CO <> src.NAME_CO OR dst.NAME_CO IS NULL AND src.NAME_CO IS NOT NULL OR dst.NAME_CO IS NOT NULL AND src.NAME_CO IS NULL
					OR dst.NAME4 <> src.NAME4 OR dst.NAME4 IS NULL AND src.NAME4 IS NOT NULL OR dst.NAME4 IS NOT NULL AND src.NAME4 IS NULL
					OR dst.SORT2 <> src.SORT2 OR dst.SORT2 IS NULL AND src.SORT2 IS NOT NULL OR dst.SORT2 IS NOT NULL AND src.SORT2 IS NULL
					OR dst.STR_SUPPL1 <> src.STR_SUPPL1 OR dst.STR_SUPPL1 IS NULL AND src.STR_SUPPL1 IS NOT NULL OR dst.STR_SUPPL1 IS NOT NULL AND src.STR_SUPPL1 IS NULL
					OR dst.STR_SUPPL2 <> src.STR_SUPPL2 OR dst.STR_SUPPL2 IS NULL AND src.STR_SUPPL2 IS NOT NULL OR dst.STR_SUPPL2 IS NOT NULL AND src.STR_SUPPL2 IS NULL
					OR dst.P_NAME1 <> src.P_NAME1 OR dst.P_NAME1 IS NULL AND src.P_NAME1 IS NOT NULL OR dst.P_NAME1 IS NOT NULL AND src.P_NAME1 IS NULL
					OR dst.P_NAME2 <> src.P_NAME2 OR dst.P_NAME2 IS NULL AND src.P_NAME2 IS NOT NULL OR dst.P_NAME2 IS NOT NULL AND src.P_NAME2 IS NULL
					OR dst.P_NAME3 <> src.P_NAME3 OR dst.P_NAME3 IS NULL AND src.P_NAME3 IS NOT NULL OR dst.P_NAME3 IS NOT NULL AND src.P_NAME3 IS NULL
					OR dst.P_NAME4 <> src.P_NAME4 OR dst.P_NAME4 IS NULL AND src.P_NAME4 IS NOT NULL OR dst.P_NAME4 IS NOT NULL AND src.P_NAME4 IS NULL
					OR dst.SHORTNAME <> src.SHORTNAME OR dst.SHORTNAME IS NULL AND src.SHORTNAME IS NOT NULL OR dst.SHORTNAME IS NOT NULL AND src.SHORTNAME IS NULL
					OR dst.HOME_CITY <> src.HOME_CITY OR dst.HOME_CITY IS NULL AND src.HOME_CITY IS NOT NULL OR dst.HOME_CITY IS NOT NULL AND src.HOME_CITY IS NULL
					OR dst.OKATO <> src.OKATO OR dst.OKATO IS NULL AND src.OKATO IS NOT NULL OR dst.OKATO IS NOT NULL AND src.OKATO IS NULL
					OR dst.OKPO <> src.OKPO OR dst.OKPO IS NULL AND src.OKPO IS NOT NULL OR dst.OKPO IS NOT NULL AND src.OKPO IS NULL
					OR dst.OGRN <> src.OGRN OR dst.OGRN IS NULL AND src.OGRN IS NOT NULL OR dst.OGRN IS NOT NULL AND src.OGRN IS NULL
				)
	LOOP
		BEGIN
			-- Статус и прогресс
			IF tmp.ROWNUM = 1 THEN
				dbms_application_info.set_action(action_name=> vAction||' '||'Накат изменений');
				vStarted := SYSDATE;
				lastsynactupd := SYSDATE;
				SetProgress(psid=> vsid, pserial=> vserial, paudsid=> vaudsid, pjournal=> pJid, psname=> vAction
					, pstatus=> 1, pmessage=> 'Накат изменений', pprogress=> tmp.ROWNUM, ptotalwork=> tmp.ROWCOUNT, pstarted=>vStarted);
			END IF;
			IF (SYSDATE - lastsynactupd) * 86400 >= updrate_syn_activity THEN
				lastsynactupd := SYSDATE;
				SetProgress(psid=> vsid, pserial=> vserial, paudsid=> vaudsid, pjournal=> pJid, psname=> vAction
					, pstatus=> 1, pmessage=> 'Накат изменений', pprogress=> tmp.ROWNUM, ptotalwork=> tmp.ROWCOUNT, pstarted=>vStarted);
			END IF;

			IF tmp.oldCNTRNR IS NULL THEN
				-- INSERT
				INSERT INTO sl_contragent dst (dst.CNTRNR, dst.MAINNR, dst.SHORTN, dst.FORM_ORG, dst.FULLNM, dst.M_REGION, dst.M_POST_CODE1, dst.M_CITY1
					, dst.M_STREET, dst.M_HOUSE_NUM1, dst.M_HOUSE_NUM2, dst.M_STREET4, dst.M_STREET5, dst.P_REGION, dst.P_POST_CODE1, dst.P_CITY1, dst.P_STREET
					, dst.P_HOUSE_NUM1, dst.P_HOUSE_NUM2, dst.P_STREET4, dst.P_STREET5, dst.PHONES, dst.KPP, dst.INN, dst.BANKN, dst.BIK, dst.BANK_ACC, dst.CORR_ACC
					, dst.BANKADR, dst.TYPE_ORG, dst.COUNTRY, dst.FULLNM_EN, dst.M_REGION_EN, dst.M_POST_CODE1_EN, dst.M_CITY1_EN, dst.M_STREET_EN, dst.M_HOUSE_NUM1_EN
					, dst.M_HOUSE_NUM2_EN, dst.VBUND, dst.ID, dst.ACTION, dst.NUMB_1C, dst.NAME_CO, dst.NAME4, dst.SORT2, dst.STR_SUPPL1, dst.STR_SUPPL2, dst.P_NAME1
					, dst.P_NAME2, dst.P_NAME3, dst.P_NAME4, dst.SHORTNAME, dst.HOME_CITY, dst.OKATO, dst.OKPO, dst.OGRN, dst.nsync, dst.FVALID, dst.LASTMODIFIED)
				VALUES (tmp.newCNTRNR, tmp.newMAINNR, tmp.newSHORTN, tmp.newFORM_ORG, tmp.newFULLNM, tmp.newM_REGION, tmp.newM_POST_CODE1, tmp.newM_CITY1
					, tmp.newM_STREET, tmp.newM_HOUSE_NUM1, tmp.newM_HOUSE_NUM2, tmp.newM_STREET4, tmp.newM_STREET5, tmp.newP_REGION, tmp.newP_POST_CODE1
					, tmp.newP_CITY1, tmp.newP_STREET, tmp.newP_HOUSE_NUM1, tmp.newP_HOUSE_NUM2, tmp.newP_STREET4, tmp.newP_STREET5, tmp.newPHONES, tmp.newKPP
					, tmp.newINN, tmp.newBANKN, tmp.newBIK, tmp.newBANK_ACC, tmp.newCORR_ACC, tmp.newBANKADR, tmp.newTYPE_ORG, tmp.newCOUNTRY, tmp.newFULLNM_EN
					, tmp.newM_REGION_EN, tmp.newM_POST_CODE1_EN, tmp.newM_CITY1_EN, tmp.newM_STREET_EN, tmp.newM_HOUSE_NUM1_EN, tmp.newM_HOUSE_NUM2_EN, tmp.newVBUND
					, tmp.newID, tmp.newACTION, tmp.newNUMB_1C, tmp.newNAME_CO, tmp.newNAME4, tmp.newSORT2, tmp.newSTR_SUPPL1, tmp.newSTR_SUPPL2, tmp.newP_NAME1
					, tmp.newP_NAME2, tmp.newP_NAME3, tmp.newP_NAME4, tmp.newSHORTNAME, tmp.newHOME_CITY, tmp.newOKATO, tmp.newOKPO, tmp.newOGRN, 1, 0, SYSDATE);
				-- Архивируем
				INSERT INTO sla_contragent dsta (dsta.sync_journal, dsta.sync_recstatus, dsta.CNTRNR, dsta.MAINNR, dsta.SHORTN, dsta.FORM_ORG, dsta.FULLNM, dsta.M_REGION, dsta.M_POST_CODE1
					, dsta.M_CITY1, dsta.M_STREET, dsta.M_HOUSE_NUM1, dsta.M_HOUSE_NUM2, dsta.M_STREET4, dsta.M_STREET5, dsta.P_REGION, dsta.P_POST_CODE1
					, dsta.P_CITY1, dsta.P_STREET, dsta.P_HOUSE_NUM1, dsta.P_HOUSE_NUM2, dsta.P_STREET4, dsta.P_STREET5, dsta.PHONES, dsta.KPP, dsta.INN
					, dsta.BANKN, dsta.BIK, dsta.BANK_ACC, dsta.CORR_ACC, dsta.BANKADR, dsta.TYPE_ORG, dsta.COUNTRY, dsta.FULLNM_EN, dsta.M_REGION_EN
					, dsta.M_POST_CODE1_EN, dsta.M_CITY1_EN, dsta.M_STREET_EN, dsta.M_HOUSE_NUM1_EN, dsta.M_HOUSE_NUM2_EN, dsta.VBUND, dsta.ID, dsta.ACTION
					, dsta.NUMB_1C, dsta.NAME_CO, dsta.NAME4, dsta.SORT2, dsta.STR_SUPPL1, dsta.STR_SUPPL2, dsta.P_NAME1, dsta.P_NAME2, dsta.P_NAME3
					, dsta.P_NAME4, dsta.SHORTNAME, dsta.HOME_CITY, dsta.OKATO, dsta.OKPO, dsta.OGRN, dsta.FNREC, dsta.NSYNC, dsta.FVALID, dsta.LASTMODIFIED)
				SELECT
					pJid, 1, src.CNTRNR, src.MAINNR, src.SHORTN, src.FORM_ORG, src.FULLNM, src.M_REGION, src.M_POST_CODE1
					, src.M_CITY1, src.M_STREET, src.M_HOUSE_NUM1, src.M_HOUSE_NUM2, src.M_STREET4, src.M_STREET5, src.P_REGION, src.P_POST_CODE1
					, src.P_CITY1, src.P_STREET, src.P_HOUSE_NUM1, src.P_HOUSE_NUM2, src.P_STREET4, src.P_STREET5, src.PHONES, src.KPP, src.INN
					, src.BANKN, src.BIK, src.BANK_ACC, src.CORR_ACC, src.BANKADR, src.TYPE_ORG, src.COUNTRY, src.FULLNM_EN, src.M_REGION_EN
					, src.M_POST_CODE1_EN, src.M_CITY1_EN, src.M_STREET_EN, src.M_HOUSE_NUM1_EN, src.M_HOUSE_NUM2_EN, src.VBUND, src.ID, src.ACTION
					, src.NUMB_1C, src.NAME_CO, src.NAME4, src.SORT2, src.STR_SUPPL1, src.STR_SUPPL2, src.P_NAME1, src.P_NAME2, src.P_NAME3
					, src.P_NAME4, src.SHORTNAME, src.HOME_CITY, src.OKATO, src.OKPO, src.OGRN, src.FNREC, src.NSYNC, src.FVALID, src.LASTMODIFIED
				FROM
					sl_contragent src
				WHERE
					src.CNTRNR = tmp.newCNTRNR;
			ELSE -- IF tmp.oldCNTRNR IS NULL THEN
				-- UPDATE
				-- Архивируем (было)
				INSERT INTO sla_contragent dsta (dsta.sync_journal, dsta.sync_recstatus, dsta.CNTRNR, dsta.MAINNR, dsta.SHORTN, dsta.FORM_ORG, dsta.FULLNM, dsta.M_REGION, dsta.M_POST_CODE1
					, dsta.M_CITY1, dsta.M_STREET, dsta.M_HOUSE_NUM1, dsta.M_HOUSE_NUM2, dsta.M_STREET4, dsta.M_STREET5, dsta.P_REGION, dsta.P_POST_CODE1
					, dsta.P_CITY1, dsta.P_STREET, dsta.P_HOUSE_NUM1, dsta.P_HOUSE_NUM2, dsta.P_STREET4, dsta.P_STREET5, dsta.PHONES, dsta.KPP, dsta.INN
					, dsta.BANKN, dsta.BIK, dsta.BANK_ACC, dsta.CORR_ACC, dsta.BANKADR, dsta.TYPE_ORG, dsta.COUNTRY, dsta.FULLNM_EN, dsta.M_REGION_EN
					, dsta.M_POST_CODE1_EN, dsta.M_CITY1_EN, dsta.M_STREET_EN, dsta.M_HOUSE_NUM1_EN, dsta.M_HOUSE_NUM2_EN, dsta.VBUND, dsta.ID, dsta.ACTION
					, dsta.NUMB_1C, dsta.NAME_CO, dsta.NAME4, dsta.SORT2, dsta.STR_SUPPL1, dsta.STR_SUPPL2, dsta.P_NAME1, dsta.P_NAME2, dsta.P_NAME3
					, dsta.P_NAME4, dsta.SHORTNAME, dsta.HOME_CITY, dsta.OKATO, dsta.OKPO, dsta.OGRN, dsta.FNREC, dsta.NSYNC, dsta.FVALID, dsta.LASTMODIFIED)
				SELECT
					pJid, 2, src.CNTRNR, src.MAINNR, src.SHORTN, src.FORM_ORG, src.FULLNM, src.M_REGION, src.M_POST_CODE1
					, src.M_CITY1, src.M_STREET, src.M_HOUSE_NUM1, src.M_HOUSE_NUM2, src.M_STREET4, src.M_STREET5, src.P_REGION, src.P_POST_CODE1
					, src.P_CITY1, src.P_STREET, src.P_HOUSE_NUM1, src.P_HOUSE_NUM2, src.P_STREET4, src.P_STREET5, src.PHONES, src.KPP, src.INN
					, src.BANKN, src.BIK, src.BANK_ACC, src.CORR_ACC, src.BANKADR, src.TYPE_ORG, src.COUNTRY, src.FULLNM_EN, src.M_REGION_EN
					, src.M_POST_CODE1_EN, src.M_CITY1_EN, src.M_STREET_EN, src.M_HOUSE_NUM1_EN, src.M_HOUSE_NUM2_EN, src.VBUND, src.ID, src.ACTION
					, src.NUMB_1C, src.NAME_CO, src.NAME4, src.SORT2, src.STR_SUPPL1, src.STR_SUPPL2, src.P_NAME1, src.P_NAME2, src.P_NAME3
					, src.P_NAME4, src.SHORTNAME, src.HOME_CITY, src.OKATO, src.OKPO, src.OGRN, src.FNREC, src.NSYNC, src.FVALID, src.LASTMODIFIED
				FROM
					sl_contragent src
				WHERE
					src.CNTRNR = tmp.newCNTRNR;

				-- Модифицируем
				UPDATE sl_contragent dst SET dst.MAINNR = tmp.newMAINNR, dst.SHORTN = tmp.newSHORTN, dst.FORM_ORG = tmp.newFORM_ORG
					, dst.FULLNM = tmp.newFULLNM, dst.M_REGION = tmp.newM_REGION, dst.M_POST_CODE1 = tmp.newM_POST_CODE1, dst.M_CITY1 = tmp.newM_CITY1
					, dst.M_STREET = tmp.newM_STREET, dst.M_HOUSE_NUM1 = tmp.newM_HOUSE_NUM1, dst.M_HOUSE_NUM2 = tmp.newM_HOUSE_NUM2, dst.M_STREET4 = tmp.newM_STREET4
					, dst.M_STREET5 = tmp.newM_STREET5, dst.P_REGION = tmp.newP_REGION, dst.P_POST_CODE1 = tmp.newP_POST_CODE1, dst.P_CITY1 = tmp.newP_CITY1
					, dst.P_STREET = tmp.newP_STREET, dst.P_HOUSE_NUM1 = tmp.newP_HOUSE_NUM1, dst.P_HOUSE_NUM2 = tmp.newP_HOUSE_NUM2, dst.P_STREET4 = tmp.newP_STREET4
					, dst.P_STREET5 = tmp.newP_STREET5, dst.PHONES = tmp.newPHONES, dst.KPP = tmp.newKPP, dst.INN = tmp.newINN, dst.BANKN = tmp.newBANKN
					, dst.BIK = tmp.newBIK, dst.BANK_ACC = tmp.newBANK_ACC, dst.CORR_ACC = tmp.newCORR_ACC, dst.BANKADR = tmp.newBANKADR, dst.TYPE_ORG = tmp.newTYPE_ORG
					, dst.COUNTRY = tmp.newCOUNTRY, dst.FULLNM_EN = tmp.newFULLNM_EN, dst.M_REGION_EN = tmp.newM_REGION_EN, dst.M_POST_CODE1_EN = tmp.newM_POST_CODE1_EN
					, dst.M_CITY1_EN = tmp.newM_CITY1_EN, dst.M_STREET_EN = tmp.newM_STREET_EN, dst.M_HOUSE_NUM1_EN = tmp.newM_HOUSE_NUM1_EN
					, dst.M_HOUSE_NUM2_EN = tmp.newM_HOUSE_NUM2_EN, dst.VBUND = tmp.newVBUND, dst.ID = tmp.newID, dst.ACTION = tmp.newACTION, dst.NUMB_1C = tmp.newNUMB_1C
					, dst.NAME_CO = tmp.newNAME_CO, dst.NAME4 = tmp.newNAME4, dst.SORT2 = tmp.newSORT2, dst.STR_SUPPL1 = tmp.newSTR_SUPPL1, dst.STR_SUPPL2 = tmp.newSTR_SUPPL2
					, dst.P_NAME1 = tmp.newP_NAME1, dst.P_NAME2 = tmp.newP_NAME2, dst.P_NAME3 = tmp.newP_NAME3, dst.P_NAME4 = tmp.newP_NAME4, dst.SHORTNAME = tmp.newSHORTNAME
					, dst.HOME_CITY = tmp.newHOME_CITY, dst.OKATO = tmp.newOKATO, dst.OKPO = tmp.newOKPO, dst.OGRN = tmp.newOGRN
					, dst.NSYNC = 1, dst.FVALID = 0, dst.LASTMODIFIED = SYSDATE
				WHERE dst.cntrnr = tmp.newCNTRNR;

				-- Архивируем (стало)
				INSERT INTO sla_contragent dsta (dsta.sync_journal, dsta.sync_recstatus, dsta.CNTRNR, dsta.MAINNR, dsta.SHORTN, dsta.FORM_ORG, dsta.FULLNM, dsta.M_REGION, dsta.M_POST_CODE1
					, dsta.M_CITY1, dsta.M_STREET, dsta.M_HOUSE_NUM1, dsta.M_HOUSE_NUM2, dsta.M_STREET4, dsta.M_STREET5, dsta.P_REGION, dsta.P_POST_CODE1
					, dsta.P_CITY1, dsta.P_STREET, dsta.P_HOUSE_NUM1, dsta.P_HOUSE_NUM2, dsta.P_STREET4, dsta.P_STREET5, dsta.PHONES, dsta.KPP, dsta.INN
					, dsta.BANKN, dsta.BIK, dsta.BANK_ACC, dsta.CORR_ACC, dsta.BANKADR, dsta.TYPE_ORG, dsta.COUNTRY, dsta.FULLNM_EN, dsta.M_REGION_EN
					, dsta.M_POST_CODE1_EN, dsta.M_CITY1_EN, dsta.M_STREET_EN, dsta.M_HOUSE_NUM1_EN, dsta.M_HOUSE_NUM2_EN, dsta.VBUND, dsta.ID, dsta.ACTION
					, dsta.NUMB_1C, dsta.NAME_CO, dsta.NAME4, dsta.SORT2, dsta.STR_SUPPL1, dsta.STR_SUPPL2, dsta.P_NAME1, dsta.P_NAME2, dsta.P_NAME3
					, dsta.P_NAME4, dsta.SHORTNAME, dsta.HOME_CITY, dsta.OKATO, dsta.OKPO, dsta.OGRN, dsta.FNREC, dsta.NSYNC, dsta.FVALID, dsta.LASTMODIFIED)
				SELECT
					pJid, 3, src.CNTRNR, src.MAINNR, src.SHORTN, src.FORM_ORG, src.FULLNM, src.M_REGION, src.M_POST_CODE1
					, src.M_CITY1, src.M_STREET, src.M_HOUSE_NUM1, src.M_HOUSE_NUM2, src.M_STREET4, src.M_STREET5, src.P_REGION, src.P_POST_CODE1
					, src.P_CITY1, src.P_STREET, src.P_HOUSE_NUM1, src.P_HOUSE_NUM2, src.P_STREET4, src.P_STREET5, src.PHONES, src.KPP, src.INN
					, src.BANKN, src.BIK, src.BANK_ACC, src.CORR_ACC, src.BANKADR, src.TYPE_ORG, src.COUNTRY, src.FULLNM_EN, src.M_REGION_EN
					, src.M_POST_CODE1_EN, src.M_CITY1_EN, src.M_STREET_EN, src.M_HOUSE_NUM1_EN, src.M_HOUSE_NUM2_EN, src.VBUND, src.ID, src.ACTION
					, src.NUMB_1C, src.NAME_CO, src.NAME4, src.SORT2, src.STR_SUPPL1, src.STR_SUPPL2, src.P_NAME1, src.P_NAME2, src.P_NAME3
					, src.P_NAME4, src.SHORTNAME, src.HOME_CITY, src.OKATO, src.OKPO, src.OGRN, src.FNREC, src.NSYNC, src.FVALID, src.LASTMODIFIED
				FROM
					sl_contragent src
				WHERE
					src.CNTRNR = tmp.newCNTRNR;
			END IF; -- IF tmp.oldCNTRNR IS NULL THEN
		EXCEPTION
			WHEN OTHERS THEN
				raise_application_error(erOraRowIdent, 'SL_CONTRAGENT '||tmp.newCNTRNR||' '||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE, TRUE);
		END;
	END LOOP lpModified;
5 окт 20, 13:03    [22209005]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 3279
istrebitel,
Вы о OR dst.SHORTN <> src.SHORTN OR dst.SHORTN IS NULL AND src.SHORTN IS NOT NULL OR dst.SHORTN IS NOT NULL AND src.SHORTN IS NULL?

ps
самое прстое decode / nvl


.....
stax
5 окт 20, 13:32    [22209017]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1385
istrebitel,

поиск расхождений:

where 
    decode(t1.f1, t2.f1, 0, 1) +
    decode(t1.f2, t2.f2, 0, 1) +
    ....
    > 0
5 окт 20, 14:36    [22209092]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 58432
oragraf
istrebitel,

поиск расхождений:

where 
    decode(t1.f1, t2.f1, 0, 1) +
    decode(t1.f2, t2.f2, 0, 1) +
    ....
    > 0
сумма выглядит красиво
но ведь требует проверки сразу все условий?
5 окт 20, 15:11    [22209138]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1385
andreymx
сумма выглядит красиво
но ведь требует проверки сразу все условий?
Обычно это условие находится в таких многоэтажных запросах, что эта экономия там - копейки, потому что все равно эта херабора целиком читается. А вот читабельность и понятность для поддержки - ой как важны. Но кому надо - поменяют сумму на OR
5 окт 20, 15:30    [22209153]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
istrebitel
Member

Откуда:
Сообщений: 151
oragraf
istrebitel,

поиск расхождений:

where 
    decode(t1.f1, t2.f1, 0, 1) +
    decode(t1.f2, t2.f2, 0, 1) +
    ....
    > 0

Спасибо, взял на заметку, а для MS SQL что то подобное имеется?
6 окт 20, 03:50    [22209326]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 956
andreymx
1.
if updating and :new.rating in ('1', '2', '3') and :new.rating !== :old.rating then
   send_mail(...);

2.
select *
  from tavble
 where value !== 5


Пока оператора нет, самый "стандартный" наверное это
where nvl(value,3) != 5


Еще можно так:

with tst (ord, val) as (select 1, null from dual union all
                         select 2,   0  from dual union all
                         select 3,   5  from dual )
select * from tst where dump(val) != dump(5)


Работает для всех типов, но типы должны строго совпадать.
Для моего SQL это означает что без каста 2.0/number != 2.0/IEEE, а также '44' != upper('44'), т.к. разные типы.

Если только для чисел, их легко привести к IEEE где есть NaN, a для те уже можно сравнивать

function Z(d in binary_double) return binary_double; -- подменяет null на NaN
...
where Z(x) != Z(y); -- но отсюда уже близко и до очевидного Same/NotSame(х,y)


Иногда просто хочется чтобы число было обычным скалярным числом.
6 окт 20, 05:12    [22209327]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 956
Синтакс пакета STANDARD сильно намекает что по крайней мере для PL/SQL новые операторы можно определять.

  function 'LIKE' (str VARCHAR2 CHARACTER SET ANY_CS,
                   pat VARCHAR2 CHARACTER SET str%CHARSET)
        return BOOLEAN;

  function '!=' (LEFT VARCHAR2 CHARACTER SET ANY_CS,
                 RIGHT VARCHAR2 CHARACTER SET ANY_CS) return BOOLEAN;


Если кто-то умеет его компилировать, они могут добавить новые операторы хотя бы для PL/SQL.
6 окт 20, 05:38    [22209328]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 58432
НеофитSQL
Еще можно так:

with tst (ord, val) as (select 1, null from dual union all
                         select 2,   0  from dual union all
                         select 3,   5  from dual )
select * from tst where dump(val) != dump(5)
WITH T AS(
SELECT LPAD('1', 1500, '1') a,
       LPAD('1', 1499, '1')||'2' b
  FROM dual
)
SELECT t.*, 1 FROM T WHERE a=b
UNION ALL
SELECT t.*, 2 FROM T WHERE DUMP(a)=DUMP(b)
  
6 окт 20, 09:18    [22209354]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7692
НеофитSQL
Еще можно так:

Помимо уже приведённого ограничения, вы действительно считаете, что вызов функции, увеличивающей количество байт для сравнения, на оба операнда - хорошая идея?
6 окт 20, 09:32    [22209357]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7692
istrebitel
для MS SQL что то подобное имеется

set ansi nulls off
6 окт 20, 09:34    [22209362]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 58432
env
istrebitel
для MS SQL что то подобное имеется

set ansi nulls off
имхо 1. напоминает гранату в руках той самой обезьяны
имхо 2: глобальные переменные зло. Особенно такого рода
6 окт 20, 10:21    [22209378]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 34 35 36 37 38 39 [40] 41 42 43   вперед  Ctrl
Все форумы / Oracle Ответить