powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PLSQL collection
13 сообщений из 13, страница 1 из 1
PLSQL collection
    #40016057
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.
...
Рейтинг: 0 / 0
PLSQL collection
    #40016102
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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, и т.д.

Похоже что вы пытаетесь передвинуть строчки в память, и работать с ними там?
Поскольку у коллекций нет индексов, запросы против коллекций могут оказаться не быстрее.
Возможно, временные таблицы (глобальные или локальные) вам подойдут лучше,
а возможно, ускорение можно достичь не копируя целые строки в память.
...
Рейтинг: 0 / 0
PLSQL collection
    #40016118
Yuri Kazakoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL,

спасибо! Запрос на SELECT COUNT(*) прошёл.
А как заполнить коллекцию данными из таблицы?
Что-то типа INSERT INTO c SELECT * FROM test_data_table;

?
...
Рейтинг: 0 / 0
PLSQL collection
    #40016133
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL
Проблема в том, что тип объявлен в теле процедуры, а не глобально в схеме, поэтому он недоступен SQL.
Чтобы объявить тип глобально, придется отказаться от %ROWTYPE, в объявлении глобальных типов это не разрешено.
Придется городить тип record, который будет похож на ROWTYPE, и т.д.

Пора тебя неуча банить.
...
Рейтинг: 0 / 0
PLSQL collection
    #40016137
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
PLSQL collection
    #40016142
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri Kazakoff
Как из plsql из неё сделать выборку в коллекцию, а потом из этой коллекции сделать SELECT?
20165163
...
Рейтинг: 0 / 0
PLSQL collection
    #40016145
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri Kazakoff
Здравствуйте!

Можете помочь?
Есть таблица:
Код: plsql
1.
CREATE TABLE(t DATE, v VALUE);



Как из plsql из неё сделать выборку в коллекцию, а потом из этой коллекции сделать SELECT?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
При попытке
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.

Для оформления кода используйте, пожалуйста, тэг SRC.
...
Рейтинг: 0 / 0
PLSQL collection
    #40016147
Yuri Kazakoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL*Plus,

Окей, прошу прощения.
...
Рейтинг: 0 / 0
PLSQL collection
    #40016150
Yuri Kazakoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
graycode,

Я всего лишь попросил помощи, а Вы сразу в штыки.
...
Рейтинг: 0 / 0
PLSQL collection
    #40016151
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yuri Kazakoff,

Ссылки на документацию, в которой есть примеры, это называется в штыки? Ну ну ...
...
Рейтинг: 0 / 0
PLSQL collection
    #40016160
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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е не обижайтесь, он однажды был вполне полезным.
...
Рейтинг: 0 / 0
PLSQL collection
    #40016227
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL
Вместо "select into" используйте "select * bulk collect into c from...".

Для скаляров "into", для коллекций "bulk collect".

Опять бестолковый совет, сам сначала научись понимать что делаешь, потом советы давай.

PS: задача в постановке топикстартера не имеет смысла, см. 22227824
...
Рейтинг: 0 / 0
PLSQL collection
    #40016437
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri Kazakoff

Как из plsql из неё сделать выборку в коллекцию, а потом из этой коллекции сделать SELECT?
....
Выдаёт ошибку ORA-00642, что локальные типы коллекций запрещены в операторах SQL.


Зачем из этой коллекции делать SELECT?

зы
заполнить самое простое bulk collect

pss
селект не даст сделать из-за ORA-00642
в некоторых случаях оракля может сам втихаря создать sql тип

.....
stax
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PLSQL collection
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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