|
|
|
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
|
|||
|---|---|---|---|
|
#18+
Всем привет, возникла такая проблема... Есть объектный тип, у него есть процедуры и функции, например: 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 ... ; Вопрос, как примерно таким-же способом (то есть только для некоторых записей таблицы) вызвать процедуру-метод. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2003, 12:32 |
|
||
|
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
|
|||
|---|---|---|---|
|
#18+
Из SQL этого сделать нельзя, это же все-таки процедура, а из PL/SQL проблем возникать не должно: declare v_test TestType:=TestType(0); begin select Temp into v_test from TestTable where ....;--если одну запись -- курсором , но НЕ неявным если много v_test .setValue; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2003, 13:06 |
|
||
|
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
|
|||
|---|---|---|---|
|
#18+
Как сделать это в PL/SQL - понятно. А в SQL - точно нельзя? Очень хочется! Обычную же процедуру можно вызвать: call TestProc(...); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2003, 13:56 |
|
||
|
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
|
|||
|---|---|---|---|
|
#18+
а можно вопрос ваще по теории? выходит что для каждой записи в таблице - элземпляра обекта хранится код его методов?. если да то какой смысл иметь кучу одинаковых функций? можно ли сделать такое: есть некоторый тип. пусть это будет типА, у него есть функция фунА. от него породили 2 подтипа - подтипА и подтипБ. и переопределили реализацию функции фунА в этих подтипах на неч-то своё. тепрь создаем таблицу с полем типа типА. записываем туда экземпляр подтипаА или подтипаБ. и пытаемся вызвать метод фунА для каждой строки. при этом должен вызываться конкретная реализация для подтипаА или подтипаБ, в зависимости какой ФАКТИЧЕСКИ объект или ссылка хранися в запси. такое можно сделать? т.е. использовать механизм виртуальных функций?. иначе ваще не видно смысла в этом ООП кроме чутьчуть другого синтаксиса. или я не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2003, 14:41 |
|
||
|
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
|
|||
|---|---|---|---|
|
#18+
Да, мне тоже интересно, поддерживает ли 9-ый Oracle виртульные ф-ции. 8-ой точно не поддерживает. По поводу вопроса "по теории": в любом случае, куча одинаковых функций нигде не хранится, в любом языке программирования для этого используются указатели на таблицы виртуальных методов или что-то вроде того. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2003, 15:02 |
|
||
|
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
|
|||
|---|---|---|---|
|
#18+
ты хочешь сказать что сделав к примеру 100 экземпляров данного класса я получаю 100 экземпляров переменной этого класса но 1 экземпляр метода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2003, 15:07 |
|
||
|
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
|
|||
|---|---|---|---|
|
#18+
Из трех главных составляющих ООП (инкапсуляция, наследование, полиморфизм), в Оракле, на мой взгляд, больше всего развито первое. Поэтому думаю, что принимать решение об использовании объектов следует при потребностях использования именно инкапсуляции. Под этим может подразумеваться несколько вещей: логическое объединение кода, сокрытие реализации, многократное использование, еще чего. Показателен пример из interMedia: объекты ORDAudio, ORDVideo содержат в себе экземпляр объекта ORDSource, где и хранятся данные. А вообще, предусмотрено сейчас в Оракле наследование и полиморфизм? Я почему-то сомневаюсь, что удасться в объектное поле таблицы вставить запись с объектом-наследником, даже если таковой можно сделать. ИМХО там разрешение на уровне OID'а идет, а он уникальный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2003, 15:07 |
|
||
|
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
|
|||
|---|---|---|---|
|
#18+
В 9 сделано полноценное наследование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2003, 15:12 |
|
||
|
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
|
|||
|---|---|---|---|
|
#18+
>> ты хочешь сказать что сделав к примеру 100 экземпляров данного класса я >> получаю 100 экземпляров переменной этого класса но 1 экземпляр метода? По-моему логично (по крайней мере в С++, Delphi, Java именно так). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2003, 15:21 |
|
||
|
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
|
|||
|---|---|---|---|
|
#18+
to Denis Popov: >> почему-то сомневаюсь, что удасться в объектное поле таблицы вставить >>запись с объектом-наследником, даже если таковой можно сделать в 9 вроде можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2003, 15:42 |
|
||
|
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
|
|||
|---|---|---|---|
|
#18+
Ага, наследование вижу, 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. Отрадно то, что последнее присвоение прошло. Что ж, выходит, и полиморфизм присутствует? Надо будет проверить все остальное, но начало обнадеживающее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2003, 15:49 |
|
||
|
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
|
|||
|---|---|---|---|
|
#18+
хорошо вам. у вас вот только что. :) а у меня всего лишь 8.1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2003, 16:50 |
|
||
|
Как из SQL вызвать процедуру-метод объекта, сохраненого в таблице.
|
|||
|---|---|---|---|
|
#18+
Ну, блин, проапгрейдься :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2003, 16:52 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=2793&tid=1991126]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 213ms |
| total: | 361ms |

| 0 / 0 |
