Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> %rowtype ++ 
:(
    Опции темы
setnull
Дата 27.1.2009, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 3.7.2007

Репутация: 1
Всего: 1



Все здравствуйте!!!!

А есть возможность расширить %rowtype, не прибегая к перечислению полей.
К примеру, у меня таблица, содержит n полей. Возможно ли объявить тип, являющийся как бы %rowtype'ом моей таблицы, только седержащий несколько дополнительных полей?

Спасибо!
PM MAIL   Вверх
Zloxa
Дата 27.1.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Нет.
Да и не надо это.
Код

  type my_record is record(
    rowtype1 all_objects%rowtype
    ,rowtype2 user_objects%rowtype 
  );



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
setnull
Дата 27.1.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 3.7.2007

Репутация: 1
Всего: 1



Так это будет

Код

declare
rec my_record
begin

rec .rowtype1.field1 := value;
rec.add_field := valu2;


?????????


А мне необходимо, чеб они были в "одной плоскости".....
PM MAIL   Вверх
Zloxa
Дата 27.1.2009, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(setnull @  27.1.2009,  16:52 Найти цитируемый пост)
Так это будет

Дык ясно ;)

Цитата(setnull @  27.1.2009,  16:52 Найти цитируемый пост)
А мне необходимо, чеб они были в "одной плоскости"

Зачем, если не секрет?
Не могу придумать.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
setnull
Дата 28.1.2009, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 3.7.2007

Репутация: 1
Всего: 1



Мне необходимо обявиь тип, который в свою очередь будет rowtype'ом для резальтата функции...

Код

TYPE A_ROW IS MY_TABLE%ROWTYPE
TYPE RES_TYPE IS TABLE OF A_ROW;

FUNCTION MY_FUNCTION
RETURN RES_TYPE PARALLEL_ENABLE PIPELINED;



Функция должна возвращать набор "скалярных" записей...
А в A_ROW нужно добавиьт несколько полей
PM MAIL   Вверх
Zloxa
Дата 28.1.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



вариант?
Код

  cursor my_cur is select t.*, cast(null as varchar2(10)) my_varchar from dual t ;
  subtype A_ROW IS my_cur%ROWTYPE;
  TYPE RES_TYPE IS TABLE OF A_ROW;
  FUNCTION MY_FUNCTION
  RETURN RES_TYPE PARALLEL_ENABLE PIPELINED;



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
setnull
Дата 29.1.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 3.7.2007

Репутация: 1
Всего: 1



Конечно, с подвыподвертом, но так даже интересней..... smile 
Спасибо!!!
PM MAIL   Вверх
setnull
Дата 29.1.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 3.7.2007

Репутация: 1
Всего: 1



Блин!
Все хорошо, только такая функция с PIPELINED у мя не компилируется....

PLS-00707: unsupported construct or internal error [2603]

в нете говорят - это баг :(


А по другому можно как-нить?

Это сообщение отредактировал(а) setnull - 5.2.2009, 09:51
PM MAIL   Вверх
Zloxa
Дата 29.1.2009, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



У меня работает.
Код

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 
 
create or replace package my_pack is
  cursor my_cur is select t.*, cast(null as varchar2(10)) my_varchar from dual t ;
  subtype A_ROW IS my_cur%ROWTYPE;
  TYPE RES_TYPE IS TABLE OF A_ROW;
  FUNCTION MY_FUNCTION
  RETURN RES_TYPE PARALLEL_ENABLE PIPELINED;
end my_pack;
/
 
Package created
create or replace package body my_pack is
  FUNCTION MY_FUNCTION
  RETURN RES_TYPE PARALLEL_ENABLE PIPELINED
  is
  begin
    for i in my_cur
    loop
      pipe row (i);
    end loop;
    return;
  end ;
end my_pack;
/
 
Package body created
select * from table(my_pack.MY_FUNCTION);
 
DUMMY MY_VARCHAR
----- ----------
X     
 

Тоже самое
Код

Connected to Oracle9i Enterprise Edition Release 9.2.0.8.0 
....
select * from table(my_pack.MY_FUNCTION);
 
DUMMY MY_VARCHAR
----- ----------
X 


Цитата(setnull @  29.1.2009,  11:57 Найти цитируемый пост)
А подругому можно как-нить? 

Брать RowType вьюхи?
Я чесгря так и не понял зачем это надо.
Что мешает честно объявить Record?

Добавлено через 6 минут и 52 секунды
Цитата(Zloxa @  29.1.2009,  12:16 Найти цитируемый пост)
У меня работает.

ХМ.... Попытка заменить dual на реальную таблицу привела к той же ошибке :((


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
setnull
Дата 5.2.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 3.7.2007

Репутация: 1
Всего: 1



Цитата(Zloxa @ 29.1.2009,  12:16)
Что мешает честно объявить Record?

да ничто и не мешает....

просто в дальнейшем при добвлении полей в таблицу приходится расачить по всей базе и выискивать, где же это поле необходимо продублировать... smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.1089 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.