powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / сравнение полей с пользовательскими типами
21 сообщений из 96, страница 4 из 4
сравнение полей с пользовательскими типами
    #39524350
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxне вижу причин из-за которых оракля не может сравнивать типы varray
Примерно та же, из-за которой требуется явный map/order для объектных типов. Нет возможности однозначно прописать критерии сравнения в общем случае.
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524353
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envStaxне вижу причин из-за которых оракля не может сравнивать типы varray
Примерно та же, из-за которой требуется явный map/order для объектных типов. Нет возможности однозначно прописать критерии сравнения в общем случае.

ага
а для table значит можно

не согласен
есть нюансы, их можно озвучить в доке

....
stax
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524355
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxне вижу причин, из-за которых оракля не может сравнивать типы varrayВ таком случае тебе дорога на change.org отстаивать свои права. Здесь опять повторять свой плач, право, уже не стоит.
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524356
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxага
а для table значит можно

ткни в доку/пример, пожалуйста
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524359
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envтребуется явный map/order для объектных типов.В SQL? -Может не стоит пороть горячку?
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524362
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envStaxага
а для table значит можно

ткни в доку/пример, пожалуйста

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  1  with t as
  2    ( select 1 id,sys.KU$_VCNT(1,2,3) c from dual union all
  3      select 2 id,sys.KU$_VCNT(1,2)   c from dual union all
  4      select 3 id,sys.KU$_VCNT(3,1,2) c from dual union all
  5      select 4 id,sys.KU$_VCNT(1,2,3) c from dual
  6    )
  7    select t1.id, t2.id
  8      from t t1, t t2
  9      where t2.id > t1.id
 10*       and t1.c = t2.c
SQL> /

        ID         ID
---------- ----------
         1          3
         1          4
         3          4

SQL> desc KU$_VCNT
 KU$_VCNT TABLE OF VARCHAR2(4000)



......
stax
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524363
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Comparing Nested Tables for Equality and Inequality
Ты про это?
If two nested table variables have the same nested table type, and that nested table type does not have elements of a record type , then you can compare the two variables for equality or inequality with the relational operators equal (=) and not equal (<>, !=, ~=, ^=). Two nested table variables are equal if and only if they have the same set of elements (in any order) .
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524366
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envStax,

Comparing Nested Tables for Equality and Inequality
Ты про это?
If two nested table variables have the same nested table type, and that nested table type does not have elements of a record type , then you can compare the two variables for equality or inequality with the relational operators equal (=) and not equal (<>, !=, ~=, ^=). Two nested table variables are equal if and only if they have the same set of elements (in any order) .

да

не вижу причин, реализовать подобное для varray

.....
stax
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524369
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

If you declare either method, then you can compare object instances in SQL
Да, согласен, погорячился.
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524370
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicStaxне вижу причин, из-за которых оракля не может сравнивать типы varrayВ таком случае тебе дорога на change.org отстаивать свои права. Здесь опять повторять свой плач, право, уже не стоит.
при чем тут плач?

тем более я почти не использую обьектные таблицы

я высказываю свое мнение,
напр когда-то не было case,bitand,порядок срабатывания, удалить колонку, fist N, автономер и тд,
тоже говорили о плаче, а смотриш и добавили

поживем увидим

зы
к стати счас трезв, но не выспался - реал смотрел

.....
stax
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524373
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,
нет. для sql - ссылка от Elic
сравнение полей с пользовательскими типами
Equal and Not Equal Comparisons.
Причем, к вопросу о том, должно ли это быть смешным, текстуально равенство определено способом отличным от текста для PL/SQL,
для pl/sql как-то пригодный для понимания текст:
Two nested table variables are equal if and only if they have the same set of elements (in any order)
А про sql сказано:
Equality is determined in the existing order of the elements, because nested tables are unordered.
Вот каков ответ (до проверки) на вопрос должен быть - здесь про одно и то же поведение написано или нет?
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524398
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envElic,
If you declare either method, then you can compare object instances in SQLДа, согласен, погорячился.Всё ещё продолжаешь.
RTFM If an object type does not have either a map or order method, only equality comparisons are allowed on objects of that type (FAQ)
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524414
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВсё ещё продолжаешь.
RTFM If an object type does not have either a map or order method, only equality comparisons are allowed on objects of that type (FAQ)

Так, да не свсем так:

Код: 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.
SQL> create or replace
  2  type person
  3  as object(name varchar2(50))
  4  /

Type created.

SQL> select 1 from dual where person('Vasya') = person('Petya');

no rows selected

SQL> create or replace
  2  type person_nt
  3  as table of person
  4  /

Type created.

SQL> select 1 from dual where person_nt(person('Vasya')) = person_nt(person('Petya'));
select 1 from dual where person_nt(person('Vasya')) = person_nt(person('Petya'))
                                                    *
ERROR at line 1:
ORA-22952: Nested Table equality requires a map method on the element ADT


SQL> 



SY.
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524418
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВсё ещё продолжаешь.
RTFM If an object type does not have either a map or order method, only equality comparisons are allowed on objects of that type (FAQ)

Проблема в том что при сравнении nested tables ораклу их нужно вначале упорядочить а для этого требуется больше/меньше/равно. Так что в свете данной задачи stax прав (похоже неосознанно ).

SY.
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524427
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя Oracle мог мы проверить cardinality = 1 и понять что тут нечего упорядочивать.

SY.
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524438
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYElicВсё ещё продолжаешь.
RTFM If an object type does not have either a map or order method, only equality comparisons are allowed on objects of that type (FAQ)

Проблема в том что при сравнении nested tables ораклу их нужно вначале упорядочить а для этого требуется больше/меньше/равно. Так что в свете данной задачи stax прав (похоже неосознанно ).

SY.

я ж написал что надо договорится 1 2 3 равно ли 1 3 2

20809391

SY, почему оракл не может стравнивать type varray ?

.....
stax
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524439
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYХотя Oracle мог мы проверить cardinality = 1 и понять что тут нечего упорядочивать.И даже в некоторых случаях может:
Код: 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.
SQL> create or replace type person_nt_obj
  2  as object
  3  ( persons person_nt
  4  , constructor function person_nt_obj
  5    ( self in out nocopy person_nt_obj
  6    , persons person_nt := person_nt()
  7    ) return self as result
  8  );
  9  /

Type created.

SQL> create or replace type body person_nt_obj
  2  as
  3    constructor function person_nt_obj
  4    ( self in out nocopy person_nt_obj
  5    , persons person_nt := person_nt()
  6    ) return self as result
  7    is
  8    begin
  9      self.persons := persons;
 10      return;
 11    end person_nt_obj;
 12  end;
 13  /

Type body created.

SQL> select 1 from dual where person_nt_obj(person_nt(person('Vasya'))) = person_nt_obj(person_nt(person('Vasya')));

         1
----------
         1

1 row selected.
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524467
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicИ даже в некоторых случаях может

Это другое. Ты просто заставил Oracle вообще не упорядочивать person_nt и как результат person_nt(person('Vasya'),person('Petya')) теперь не равен person_nt(person('Petya'),person('Vasya')):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> select  1
  2    from dual
  3    where person_nt_obj(person_nt(person('Vasya'),person('Petya'))) = person_nt_obj(person_nt(person('Petya'),person('Vasya')))
  4  /

no rows selected

SQL> 



SY.
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524472
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYЭто другоеХЕЗ. По мне, это неодинаковое поведение в разных обстоятельствах.
SYТы просто заставил Oracle вообще не упорядочиватьЯ его ничего такого не заставлял. Я всего лишь объявил конструктор, и, о чудо(?), ORA-22952 ушла.
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524481
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicПо мне, это неодинаковое поведение в разных обстоятельствах.


Да, похоже на баг.

SY.
...
Рейтинг: 0 / 0
сравнение полей с пользовательскими типами
    #39524489
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYДа, похоже на баг.


И не просто конструктора, а с аргументом типа person_nt:

Код: 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.
94.
95.
96.
SQL> drop type body person_nt_obj
  2  /

Type body dropped.

SQL> drop type person_nt_obj
  2  /

Type dropped.

SQL> create or replace type person_nt_obj
  2      as object
  3      ( persons person_nt
  4      , constructor function person_nt_obj
  5        ( self in out nocopy person_nt_obj
  6      , persons person_nt := person_nt()
  7        ) return self as result
  8      );
  9  /

Type created.

SQL> create or replace type body person_nt_obj
  2     as
  3       constructor function person_nt_obj
  4       ( self in out nocopy person_nt_obj
  5      , persons person_nt := person_nt()
  6       ) return self as result
  7       is
  8       begin
  9         self.persons := person_nt();
 10         return;
 11       end person_nt_obj;
 12     end;
 13  /

Type body created.

SQL> select  1
  2    from dual
  3    where person_nt_obj(person_nt(person('Vasya'),person('Petya'))) = person_nt_obj(person_nt(person('Petya'),person('Vasya')))
  4  /

         1
----------
         1

SQL> drop type body person_nt_obj
  2  /

Type body dropped.

SQL> drop type person_nt_obj
  2  /

Type dropped.

SQL> create or replace type person_nt_obj
  2      as object
  3      ( persons person_nt
  4      , constructor function person_nt_obj
  5        ( self in out nocopy person_nt_obj
  6      , persons number
  7        ) return self as result
  8      );
  9  /

Type created.

SQL> create or replace type body person_nt_obj
  2     as
  3       constructor function person_nt_obj
  4       ( self in out nocopy person_nt_obj
  5      , persons number
  6       ) return self as result
  7       is
  8       begin
  9         self.persons := person_nt();
 10         return;
 11       end person_nt_obj;
 12     end;
 13  /

Type body created.

SQL> select  1
  2    from dual
  3    where person_nt_obj(person_nt(person('Vasya'),person('Petya'))) = person_nt_obj(person_nt(person('Petya'),person('Vasya')))
  4  /
  where person_nt_obj(person_nt(person('Vasya'),person('Petya'))) = person_nt_obj(person_nt(person('Petya'),person('Vasya')))
                                                                    *
ERROR at line 3:
ORA-22952: Nested Table equality requires a map method on the element ADT


SQL> 



SY.
...
Рейтинг: 0 / 0
21 сообщений из 96, страница 4 из 4
Форумы / Oracle [игнор отключен] [закрыт для гостей] / сравнение полей с пользовательскими типами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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