powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
14 сообщений из 14, страница 1 из 1
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
    #32134558
solovey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет,
возникла такая проблема...

Есть объектный тип, у него есть процедуры и функции, например:

create or replace type TestType as object
(
Value integer,
member function getValue return string,
member procedure setValue(Str in string),
...
);

и есть таблица, например:

create or replace table TestTable(
Temp TestType;
...
);

Понятно как вызвать функцию-метод объектов, сохраненных в таблице:

select t.Temp.getValue() from TestTable t where ... ;

Вопрос, как примерно таким-же способом (то есть только для некоторых записей таблицы) вызвать процедуру-метод.

Заранее спасибо.
...
Рейтинг: 0 / 0
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
    #32134618
_no_name_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из SQL этого сделать нельзя, это же все-таки процедура, а из PL/SQL проблем возникать не должно:
declare
v_test TestType:=TestType(0);
begin
select Temp into v_test from TestTable where ....;--если одну запись
-- курсором , но НЕ неявным если много
v_test .setValue;
end;
...
Рейтинг: 0 / 0
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
    #32134698
solovey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как сделать это в PL/SQL - понятно.
А в SQL - точно нельзя? Очень хочется!
Обычную же процедуру можно вызвать:

call TestProc(...);
...
Рейтинг: 0 / 0
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
    #32134757
Блин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно вопрос ваще по теории?
выходит что для каждой записи в таблице - элземпляра обекта хранится код его методов?. если да то какой смысл иметь кучу одинаковых функций?

можно ли сделать такое:
есть некоторый тип. пусть это будет типА, у него есть функция фунА.
от него породили 2 подтипа - подтипА и подтипБ.
и переопределили реализацию функции фунА в этих подтипах на неч-то своё.

тепрь создаем таблицу с полем типа типА.
записываем туда экземпляр подтипаА или подтипаБ.
и пытаемся вызвать метод фунА для каждой строки.
при этом должен вызываться конкретная реализация для подтипаА или подтипаБ, в зависимости какой ФАКТИЧЕСКИ объект или ссылка хранися в запси.
такое можно сделать?
т.е. использовать механизм виртуальных функций?.

иначе ваще не видно смысла в этом ООП кроме чутьчуть другого синтаксиса.
или я не прав?
...
Рейтинг: 0 / 0
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
    #32134781
solovey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, мне тоже интересно, поддерживает ли 9-ый Oracle виртульные ф-ции.
8-ой точно не поддерживает.

По поводу вопроса "по теории":
в любом случае, куча одинаковых функций нигде не хранится, в любом языке программирования для этого используются указатели на таблицы виртуальных методов или что-то вроде того.
...
Рейтинг: 0 / 0
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
    #32134788
Блин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты хочешь сказать что сделав к примеру 100 экземпляров данного класса я получаю 100 экземпляров переменной этого класса но 1 экземпляр метода?
...
Рейтинг: 0 / 0
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
    #32134789
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из трех главных составляющих ООП (инкапсуляция, наследование, полиморфизм), в Оракле, на мой взгляд, больше всего развито первое. Поэтому думаю, что принимать решение об использовании объектов следует при потребностях использования именно инкапсуляции. Под этим может подразумеваться несколько вещей: логическое объединение кода, сокрытие реализации, многократное использование, еще чего. Показателен пример из interMedia: объекты ORDAudio, ORDVideo содержат в себе экземпляр объекта ORDSource, где и хранятся данные.

А вообще, предусмотрено сейчас в Оракле наследование и полиморфизм? Я почему-то сомневаюсь, что удасться в объектное поле таблицы вставить запись с объектом-наследником, даже если таковой можно сделать. ИМХО там разрешение на уровне OID'а идет, а он уникальный.
...
Рейтинг: 0 / 0
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
    #32134796
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 9 сделано полноценное наследование.
...
Рейтинг: 0 / 0
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
    #32134812
solovey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>> ты хочешь сказать что сделав к примеру 100 экземпляров данного класса я
>> получаю 100 экземпляров переменной этого класса но 1 экземпляр метода?

По-моему логично (по крайней мере в С++, Delphi, Java именно так).
...
Рейтинг: 0 / 0
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
    #32134837
DimaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Denis Popov:

>> почему-то сомневаюсь, что удасться в объектное поле таблицы вставить
>>запись с объектом-наследником, даже если таковой можно сделать
в 9 вроде можно.
...
Рейтинг: 0 / 0
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
    #32134849
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, наследование вижу, UNDER Clause в CREATE OBJECT

http://technet.oracle.com/docs/products/oracle9i/doc_library/release2/server.920/a96540/statements_82a.htm#2080703

И навскидку попробовал следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create or replace type t_a as object (
  a number( 9 )
) not final
/
create or replace type t_b UNDER t_a (
  b number( 9 )
)
/

declare a t_a;
begin
  a := t_a(null);
  a := t_b(null, null);
end;
/


Отрадно то, что последнее присвоение прошло. Что ж, выходит, и полиморфизм присутствует? Надо будет проверить все остальное, но начало обнадеживающее.
...
Рейтинг: 0 / 0
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
    #32134932
Блин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо вам.
у вас вот только что. :)

а у меня всего лишь 8.1.5
...
Рейтинг: 0 / 0
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
    #32134934
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, блин, проапгрейдься :)
...
Рейтинг: 0 / 0
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
    #32135100
DimaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В конце концов, переименуют в
Object PL/SQL или PL/SQL++
И нафига тогда java?
:) :) :)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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