Форум программистов, компьютерный форум, киберфорум
Наши страницы
Oracle
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Portlend
0 / 0 / 0
Регистрация: 26.01.2013
Сообщений: 26
#1

Как сделать селект с временной таблицы обьявленной внутри процедуры - Oracle

25.03.2014, 16:32. Просмотров 1825. Ответов 7
Метки нет (Все метки)

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE OR REPLACE PROCEDURE history
(id NUMBER DEFAULT NULL,
e_date DATE DEFAULT NULL)
IS
TYPE temptable IS TABLE OF hist_all%rowtype
INDEX BY binary_integer;
ttable temptable;
BEGIN
.......
......
SELECT * BULK COLLECT 
    INTO ttable
    FROM hist a
    WHERE a.id=history.id AND a.date_f<=history.e_date;
Как вывести данные с таблицы ttable?

http://www.cyberforum.ru/database/thread462896.html
Добавлено через 16 минут
ребята, прошу помочь...горит
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2014, 16:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как сделать селект с временной таблицы обьявленной внутри процедуры (Oracle):

Можно ли вызвать функцию внутри процедуры в Oracle и как?
Можно ли вызвать функцию внутри процедуры в Oracle и как?

Селект из 2-х таблиц, как сделать?
А как сделать такое? Есть таб1. с полем Name (1000 уникальных записей), и...

Как сделать селект пустым при загрузке?
Знаю, вопрос тупой, но что-то не могу найти, как сделать, чтоб при выводе из...

Как можно удалить запись из временной таблицы?
подскажите как можно удалить запись из временной таблицы? я сначала создал...

Создание временной таблицы,где ее название-переменная,названия столбцов-поля другой таблицы ..
Помогите,пож-ста,справиться со следующей проблемой. Есть главная таблица с...

7
Grossmeister
Модератор
3331 / 2413 / 401
Регистрация: 21.01.2011
Сообщений: 10,640
25.03.2014, 16:37 #2
Пробежаться в цикле?

PS
Это не называется "временная таблица", это называется коллекция. Временная таблица в Oracle - это та, которая создается с пом. CREATE GLOBAL TEMPORARY TABLE
0
Portlend
0 / 0 / 0
Регистрация: 26.01.2013
Сообщений: 26
25.03.2014, 16:41  [ТС] #3
Grossmeister, можете примерчик показать как извлечь данные с коллекции?
0
Grossmeister
Модератор
3331 / 2413 / 401
Регистрация: 21.01.2011
Сообщений: 10,640
25.03.2014, 17:02 #4
SQL
1
2
3
4
5
FOR i IN 1..tab1.Count loop
    
  dbms_output.put_line(tab1(i).fld1);
 
END loop;
Если не знаем, с какого по какой индекс у коллекции, можно использовать методы First, Last, Next.
Все это описано в любой книжке или доке по PL/SQL
0
Portlend
0 / 0 / 0
Регистрация: 26.01.2013
Сообщений: 26
25.03.2014, 17:10  [ТС] #5
SQL
1
2
3
4
FOR i IN 1..ttable.count loop
  dbms_output.put_line(ttable(i));
 
  END loop;
Написал для моего случая, но выдает ошибку
wrong number of types of arguments in call to put_line
0
Grossmeister
Модератор
3331 / 2413 / 401
Регистрация: 21.01.2011
Сообщений: 10,640
25.03.2014, 17:24 #6
Если бы у тебя коллекция состояла из простых типов (number, varchar2), то твой текст прокатил бы. Но у тебя коллекция состоит из record-ов, которую целиком вывести нельзя, только по полям. Поэтому я в своем примере и указал одно поле record-а
0
Portlend
0 / 0 / 0
Регистрация: 26.01.2013
Сообщений: 26
26.03.2014, 09:57  [ТС] #7
т.е. вывести многомерную таблицу нельзя с таким обьявлением переменных?

Добавлено через 3 минуты
Запрос типа select * from TABLE(CAST(my_table AS my_table_type)) не подойдет здесь?

Добавлено через 6 минут
Мне нужно вернуть данные с коллекции в полной обьеме, не по 1 строке.

Добавлено через 40 минут
подскажите пожалуйста где я неправ?

Добавлено через 6 часов 4 минуты
Может кто-нибудь показать как на моем примере можно извлечт данные с коллекции?

Добавлено через 9 часов 28 минут
Grossmeister, help
сегодня здаваться(
0
Grossmeister
Модератор
3331 / 2413 / 401
Регистрация: 21.01.2011
Сообщений: 10,640
26.03.2014, 10:20 #8
Цитата Сообщение от Portlend
Запрос типа select * from TABLE(CAST(my_table AS my_table_type)) не подойдет здесь?
В Oracle исторически сложилось так, что есть 2 движка: SQL и PL/SQL. SELECT - это движок SQL. Движок SQL понимает только типы данных SQL. В SQL есть только 2 типа коллекций: nested table и varray. PL/SQL кроме того умеет работать и с третьим типом - index-by table. Так вот, у тебя определена именно index-by table, про которую SQL ничего не знает и, следовательно, ее нельзя использовать в SELECT.
Кроме того, чтобы ту же nested table можно было использовать в SELECT, такой тип д.б. определен на уровне БД, а не в процедуре/пакете (оттуда SQL тоже не может доставать типы). Ну и RECORD здесь не подходит (это тоже PL/SQL тип), нужно создавать OBJECT опять же на уровне БД.
0
26.03.2014, 10:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 10:20
Привет! Вот еще темы с решениями:

Как через pattern сделать форматирование временной зоны?
Формат типа -3, -2, -1, 0, +1, +2, +3 и.т.д

Обработка простой формы с ИНПУТи СЕЛЕКТ/Не подхватываются в обработчик переменные СЕЛЕКТ(ОПШНС). Что делать?:-)
Доброй ночи! Помогите, кто чем может:-) Простая форма содержит INPUT и...

Открытие списка селект за пределами ячейки таблицы
Всем привет! В общем, сунул список селект в ячейку таблицы, и когда...

Как использовать OBJECTID внутри процедуры ?
Столкнулся с проблемой.. В процедуре имя таблицы составное и надо обращаться к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru