|
PLSQL collection
|
|||
---|---|---|---|
#18+
Здравствуйте! Можете помочь? Есть таблица: CREATE TABLE(t DATE, v VALUE); Как из plsql из неё сделать выборку в коллекцию, а потом из этой коллекции сделать SELECT? При попытке DECLARE TYPE collect_type IS TABLE OF test_data%ROWTYPE; c collect_type; n INT; BEGIN SELECT COUNT(*) INTO n FROM TABLE(c); END; Выдаёт ошибку ORA-00642, что локальные типы коллекций запрещены в операторах SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:12 |
|
PLSQL collection
|
|||
---|---|---|---|
#18+
Yuri Kazakoff Здравствуйте! Можете помочь? Есть таблица: CREATE TABLE(t DATE, v VALUE); Как из plsql из неё сделать выборку в коллекцию, а потом из этой коллекции сделать SELECT? При попытке DECLARE TYPE collect_type IS TABLE OF test_data%ROWTYPE; c collect_type; n INT; BEGIN SELECT COUNT(*) INTO n FROM TABLE(c); END; Выдаёт ошибку ORA-00642, что локальные типы коллекций запрещены в операторах SQL. Проблема в том, что тип объявлен в теле процедуры, а не глобально в схеме, поэтому он недоступен SQL. Чтобы объявить тип глобально, придется отказаться от %ROWTYPE, в объявлении глобальных типов это не разрешено. Придется городить тип record, который будет похож на ROWTYPE, и т.д. Похоже что вы пытаетесь передвинуть строчки в память, и работать с ними там? Поскольку у коллекций нет индексов, запросы против коллекций могут оказаться не быстрее. Возможно, временные таблицы (глобальные или локальные) вам подойдут лучше, а возможно, ускорение можно достичь не копируя целые строки в память. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 20:11 |
|
PLSQL collection
|
|||
---|---|---|---|
#18+
НеофитSQL, спасибо! Запрос на SELECT COUNT(*) прошёл. А как заполнить коллекцию данными из таблицы? Что-то типа INSERT INTO c SELECT * FROM test_data_table; ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 21:03 |
|
PLSQL collection
|
|||
---|---|---|---|
#18+
НеофитSQL Проблема в том, что тип объявлен в теле процедуры, а не глобально в схеме, поэтому он недоступен SQL. Чтобы объявить тип глобально, придется отказаться от %ROWTYPE, в объявлении глобальных типов это не разрешено. Придется городить тип record, который будет похож на ROWTYPE, и т.д. Пора тебя неуча банить. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 22:21 |
|
PLSQL collection
|
|||
---|---|---|---|
#18+
Yuri Kazakoff Как из plsql из неё сделать выборку в коллекцию, а потом из этой коллекции сделать SELECT? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 23:29 |
|
PLSQL collection
|
|||
---|---|---|---|
#18+
Yuri Kazakoff Здравствуйте! Можете помочь? Есть таблица: Код: plsql 1.
Как из plsql из неё сделать выборку в коллекцию, а потом из этой коллекции сделать SELECT? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Выдаёт ошибку ORA-00642, что локальные типы коллекций запрещены в операторах SQL. Для оформления кода используйте, пожалуйста, тэг SRC. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 23:46 |
|
PLSQL collection
|
|||
---|---|---|---|
#18+
SQL*Plus, Окей, прошу прощения. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 23:54 |
|
PLSQL collection
|
|||
---|---|---|---|
#18+
graycode, Я всего лишь попросил помощи, а Вы сразу в штыки. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2020, 00:19 |
|
PLSQL collection
|
|||
---|---|---|---|
#18+
Yuri Kazakoff, Ссылки на документацию, в которой есть примеры, это называется в штыки? Ну ну ... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2020, 00:40 |
|
PLSQL collection
|
|||
---|---|---|---|
#18+
Yuri Kazakoff НеофитSQL, спасибо! Запрос на SELECT COUNT(*) прошёл. А как заполнить коллекцию данными из таблицы? Что-то типа INSERT INTO c SELECT * FROM test_data_table; ? Вместо "select into" используйте "select * bulk collect into c from...". Для скаляров "into", для коллекций "bulk collect". На greycodе не обижайтесь, он однажды был вполне полезным. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2020, 02:00 |
|
PLSQL collection
|
|||
---|---|---|---|
#18+
НеофитSQL Вместо "select into" используйте "select * bulk collect into c from...". Для скаляров "into", для коллекций "bulk collect". Опять бестолковый совет, сам сначала научись понимать что делаешь, потом советы давай. PS: задача в постановке топикстартера не имеет смысла, см. 22227824 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2020, 17:04 |
|
PLSQL collection
|
|||
---|---|---|---|
#18+
Yuri Kazakoff Как из plsql из неё сделать выборку в коллекцию, а потом из этой коллекции сделать SELECT? .... Выдаёт ошибку ORA-00642, что локальные типы коллекций запрещены в операторах SQL. Зачем из этой коллекции делать SELECT? зы заполнить самое простое bulk collect pss селект не даст сделать из-за ORA-00642 в некоторых случаях оракля может сам втихаря создать sql тип ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 10:52 |
|
|
start [/forum/topic.php?fid=52&fpage=33&tid=1880739]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 293ms |
total: | 424ms |
0 / 0 |