|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
Добрый день. Чё оно не работает? Код: plsql 1. 2. 3. 4. 5. 6. 7.
Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 11:26 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
IMNO, А причем тут коллекция? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 11:31 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
-2-, подразумевается, что matrix_risk_tab будет коллекция объектов matrix_risk_obj. Я так понимаю, что у меня ошибка в терминологии, и Вы на это обращаете внимание) В общем, мне надо, чтобы инициализация в примере заработала. Только что попробовал, если типы объявлены на уровне базы, то всё работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 11:34 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
IMNOЧё оно не работает? У RECORD нет конструкторов. Посему: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 15:15 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
SY Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
До кучи: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 15:25 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
SYУ RECORD нет конструкторов.Ссылочку-таки почитай. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 15:25 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
ElicSYУ RECORD нет конструкторов.Ссылочку-таки почитай. OK. Уточню - до 18C у RECORD нет конструкторов. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 15:30 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
SYУточню"Исправлюсь"? SYнетПравильнее говорить "не было". ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 15:32 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
ElicПравильнее говорить "не было". Эээ... А что, с появлением 18с у record в предыдущих релизов конструкторы появились ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 15:35 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
SYOK. Уточню - до 18C у RECORD нет конструкторов.Их и в 18с нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 16:03 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
-2-Их и в 18с нет. A constructor is a special method of a class or structure in object-oriented programming that initializes an object of that type. A constructor is an instance method that usually has the same name as the class, and can be used to set the values of the members of an object, either to default or to user-defined values. Ну обозвали qualified expression. Обьясни в чем отличие от system defined constructor? SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 17:46 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
SYв чем отличие от system defined constructor?В том, что переменная типа рекорд, в отличие от объектного, не может быть null. Конструировать нечего.ссылкаIn PL/SQL, we use the terms "qualified expression" and "aggregate" rather than the SQL term "type constructor" ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 17:54 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
-2-В том, что переменная типа рекорд, в отличие от объектного, не может быть null. Конструировать нечего. Не хочу лезть в дебри философии, но разница в том что переменную объектного тип, как ты и сказал, можно отдельно сначала создать а затем отдельно инициировать с помощью либо системного либо одного из пользоватeльских конструкторов. А можно создать и инициировать "в одном флаконе": Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
А с RECORD отдельно сначала создать а затем отдельно инициировать нельзя. RECORD всегда создается и инициируется "в одном флаконе". При декларации все атрибуты инициируются в NULL: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Так что, IMHO, конструктор есть в обоих случаях только с RECORD он применяется "в одном флаконе" с созданием. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2019, 14:46 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
SYТак что, IMHO, конструктор есть в обоих случаях только с RECORD он применяется "в одном флаконе" с созданием. Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2019, 15:18 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
iOracleDev Код: plsql 1.
И что подразумевает сей ? Начнем с того чтo select * into object банально не катит. Катит select object_type(col1,...colN) into object_var который создает и инициирует временный обьект object_type(col1,...colN) а затем присваевает его object_var. А вот select * into record это просто для "меньше буковок" и банально означает select * into record.attribute1,...record.attributeN. Никакого RECORD тут не создается. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2019, 15:34 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
SY, В одном случае нам необходимо использовать конструктор объекта, в другом нет, в случае с записью все делается "под капотом", record не является объектом в pl/sql, мы не работаем с ним как с объектом. "Никакого RECORD тут не создается." - фетч в коллекцию тоже не приводит к созданию, а чем тогда заполняется коллекция записей? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2019, 16:02 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
iOracleDevВ одном случае нам необходимо использовать конструктор объекта, в другом нет, в случае с записью все делается "под капотом", record не является объектом в pl/sql, мы не работаем с ним как с объектом. "Никакого RECORD тут не создается." - фетч в коллекцию тоже не приводит к созданию, а чем тогда заполняется коллекция записей? Ещё раз. Разницу между SELECT OBJECT_TYPE(col1,...colN) INTO OBJECT_VAR и SELECT col1,...colN INTO RECORD_VAR обьяснять не надо? В последнем record, как я и сказал, для "меньше буковок". A вот коллекция RECORD их и создает и инициализирует (конструктор) "в одном флаконе", причем делается это во всех версиях: Код: 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.
BULK COLLECT (остaвим оптимизацию в покое): a) инициализирует коллекцию б) extend коллекцию что "в одном флаконе" создает и инициализирует (конструктор) RECORD (все атрибуты инициализуются в NULL) в) заполняет атрибуты RECORD Иллюстрация б) в той-же 10G: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Ещё раз - IMHO, конструктор есть в обоих случаях только с RECORD он применяется "в одном флаконе" с созданием. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2019, 16:51 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
SYпеременную объектного тип, как ты и сказал, можно отдельно сначала создать а затем отдельно инициировать с помощью либо системного либо одного из пользоватeльских конструкторов. А можно создать и инициировать "в одном флаконеДля понимания, чем "создать" отличается от "инициировать", не хватает примера "создать и не инициировать". SYконструктор есть в обоих случаяхЕсли синтаксический сахар, что вместо повторения переменной на каждое присвоение один раз пишется имя типа, есть конструктор. Тогда и у типа number есть безымянный "конструктор". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2019, 16:52 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
-2-Если синтаксический сахар, что вместо повторения переменной на каждое присвоение один раз пишется имя типа, есть конструктор. Тогда и у типа number есть безымянный "конструктор". Я же сказал что INTO RECORD это для "меньше буковок". A вот COLLECTION(RECORD(VAL1,...)), IMHO, нет. Ну не вижу я разницы между MATRIX_RISK_REC(NULL,NULL,NULL,NULL) и MATRIX_RISK_OBJ(NULL,NULL,NULL,NULL). И тот и другой создает RECORD/OBJECT и присваивает каждому отдельному атрибуту указанное значение. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2019, 17:22 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
SY, Разница простая record - не объект и работать с ним как с объектом нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2019, 18:32 |
|
Инициализация сложной коллекции
|
|||
---|---|---|---|
#18+
iOracleDevРазница простая record - не объект и работать с ним как с объектом нельзя. Речь шла о том чем qualified expression отличается от конструктора: Starting with Oracle Database Release 18c, any PL/SQL value can be provided by an expression (for example for a record or for an associative array) like a constructor provides an abstract datatype value. In PL/SQL, we use the terms "qualified expression" and "aggregate" rather than the SQL term "type constructor", but the functionality is the same . А то что record - не объект это и так понятно. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2019, 18:49 |
|
|
start [/forum/topic.php?fid=52&msg=39844670&tid=1882226]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 273ms |
total: | 437ms |
0 / 0 |