Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / chain of type attr / 3 сообщений из 3, страница 1 из 1
10.08.2016, 17:53:38
    #39289918
Cheese)))
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
chain of type attr
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
create type X1 as object
(
  x integer
)
/

create type X2 as object
(
  x x1
)
/

create type X3 as object
(
  x x2
)
/

declare
  x x3;
begin
  dbms_output.put_line('result ' || nvl(to_char(x.x.x.x), 'null'));
end;
/

result null


Видим что возвращает null ни смотря на то что запрашиваются отрабуты не инициализированных объектов.
Можно ли измнить поведение параеметром или как-то, чтобы если объект не инициализирован, то был экзепшен?
...
Рейтинг: 0 / 0
11.08.2016, 00:52:19
    #39290061
plsqlO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
chain of type attr
https://docs.oracle.com/database/121/ADOBJ/adobjplsql.htm#ADOBJ7175

How PL/SQL Treats Uninitialized Objects
In an expression, attributes of an uninitialized object evaluate to NULL.

Видимо только через методы-геттеры. При обращении к такому методу проверка на неинициализированный объект уже срабатывает:

create or replace type X1 as object
(
x integer,
member function getX return x%type
)
/

create or replace type body X1 is

member function getX return x%type is
begin
return self.x;
end;

end;
/

SQL> set serveroutput on
declare
x x3;
begin
dbms_output.put_line('result ' || nvl(to_char(x.x.x.getX), 'null'));
end;
SQL> 2 3 4 5 6 /
declare
*
ERROR at line 1:
ORA-30625: method dispatch on NULL SELF argument is disallowed
ORA-06512: at line 4
...
Рейтинг: 0 / 0
11.08.2016, 10:48:01
    #39290165
Cheese)))
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
chain of type attr
plsqlO,

Геттеры было бы хорошо, но хотелось бы эти объекты потом в SQL использовать, а при таком подходе он весь объект в SQL суёт, что не выглядит хорошо.

Select
...
from
...
where
id = x.x.x.getX

В SQL улетит весь X объект вместо результата метода. Можно предвычислять в переменную, но таких мест уж очень много, не красиво получится.
Второе таким образом в коде создаться множество вычисляемых методов, что тоже не выглядит хорошо.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / chain of type attr / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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