powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Таблица ссылается на саму себя по функции
6 сообщений из 6, страница 1 из 1
Таблица ссылается на саму себя по функции
    #39364832
Знаю, что это плохая практика, генерить виртуальную колонку с функцией которая лезет в таблицу. Но у меня стоит задача перенести код из одной базы в другую. И этот кусок не переноситься.

Без таблицы функция не компилируется, без валидной функции не создается таблица.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create table t(
    file_id number primary key,
    file_name varchar2(30),
    parent_file_id references t,
    file_path varchar2(4000) GENERATED ALWAYS AS (get_path(file_id)) VIRTUAL VISIBLE
);
 
 
CREATE OR REPLACE FUNCTION get_path(vfile_id in int)
  return varchar2 deterministic is
  v_res varchar2(255);
begin
  select listagg(file_name, ' / ') within group(order by lvl desc) into v_res
    from (select file_name, level lvl
            from t
          connect by prior t.parent_file_id = t.file_id
           start with t.file_id = vfile_id);
  return v_res;
end;
...
Рейтинг: 0 / 0
Таблица ссылается на саму себя по функции
    #39364835
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зимний деньЗнаю, что это плохая практика, генерить виртуальную колонку с функцией которая лезет в таблицу.Представление не подходит?
...
Рейтинг: 0 / 0
Таблица ссылается на саму себя по функции
    #39364840
Elic,нет. Код менять нельзя . Вопрос как перенести то что есть.
...
Рейтинг: 0 / 0
Таблица ссылается на саму себя по функции
    #39364842
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зимний день,

Через промежуточный шаг
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
create table t(
    file_id number primary key,
    file_name varchar2(30),
    parent_file_id references t,
    file_path varchar2(4000) GENERATED ALWAYS AS ('1') VIRTUAL VISIBLE
);
 
 
CREATE OR REPLACE FUNCTION get_path(vfile_id in int)
  return varchar2 deterministic is
  v_res varchar2(255);
begin
  select listagg(file_name, ' / ') within group(order by lvl desc) into v_res
    from (select file_name, level lvl
            from t
          connect by prior t.parent_file_id = t.file_id
           start with t.file_id = vfile_id);
  return v_res;
end;
/

alter table t modify file_path varchar2(4000) GENERATED ALWAYS AS (get_path(file_id)) VIRTUAL VISIBLE;



Regards

Maxim
...
Рейтинг: 0 / 0
Таблица ссылается на саму себя по функции
    #39365920
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Demenko,

get_path не deterministic тоже могут быть проблемы

.....
stax
...
Рейтинг: 0 / 0
Таблица ссылается на саму себя по функции
    #39365970
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

Да, конечно, но это скорее к ТС

Regards

Maxim
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Таблица ссылается на саму себя по функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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