powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Хранение и редактирование графа
25 сообщений из 30, страница 1 из 2
Хранение и редактирование графа
    #36258198
vantyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Требуется редактировать граф и отображать в виде матрицы смежности:

| Пункт_1 | Пункт_2 | Пункт_3 | Пункт_4....
| Пункт_1 | Вес11 | Вес12 | Вес13 |
| Пункт_2 | Вес21 | Вес12 | Вес23 |
| Пункт_3 | Вес31 | Вес32 | Вес33 |
| Пункт_4 | Вес41 | Вес42 | Вес43 |
.....

Как мне его следует хранить? Предполагал в виде списка. И как тогда выводить и редактировать?
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36258214
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vantyz,

0. Как хранить - Вам виднее. Направленный это граф или нет, что в нём является вершинами (просто АА12С или сущности с атрибутами), допустимы ли петли и рёбра с одинаковыми вершинами, но разными весами - от всего этого будет зависеть структура.
1. Как выводить и редактировать - это уже вопрос к заказчику, он (хотя бы подсознательно) знает, как ему удобнее. Или Вы для форума пишите приложение? :) Да, чтобы Вы сразу не шагнули в сторону табличных отчётов для отображения: даже матрица 100x100 с большими идентификаторами рёбер выглядеть будет не очень презентабельно.
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36258252
vantyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для института делаю. Граф будет однонаправленный, без петель, объемов больших не надо. Думаю табличка будет 20х20 максимум, поэтому и решил, что презентабельно будет выглядеть. Хочется именно таблицей, потому-что списком редактировать не проблема (а именно проблем и надо побольше). Я вот не могу понять, можем ли мы одним запросом сформировать таблицу, колонками, которой будут являться различные строки исходной таблицы (вершины графа), первая колонка будет дублировать названия всех колонок, а значения в строках будут веса ребер. Попытаюсь переформулировать: Граф задан списком, надо его одним запросом выразить матрицей смежности. Можем ли мы это выполнить?
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36258282
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vantyz,

да, можем. В таком простом случае хранение - таблицы вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table nodes (node# primary key);

create table edges 
( start_node number
, end_node number
, weight number);

alter table edges add constraint edges_pk primary key(start_node, end_node);
alter table edges add constraint edges_start_node_fk foreign key (start_node) references nodes(node#);
alter table edges add constraint edges_end_node_fk foreign key (end_node) references nodes(node#);
alter table edges add constraint edges_diff_nodes check (start_node <> end_node);
Вот как от петель избавиться - это будет интересным заданием. :)

Насчёт вывода в виде матрицы смежности: какая версия Oracle Database у Вас? Если 11g, то есть встроенный оператор pivot, если более старая - Вам нужно будет собрать строку запроса циклом по вершинам в процедуре и вернуть её в апексовский регион-отчёт.
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36258324
vantyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я делаю на http://apex.oracle.com смею предположить, что там 11G?
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36258332
vantyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Петель быть не должно, т.к. я буду модель авиа-бронирования делать (сильно упрощенную, до минимума), будет глупо выглядеть перелет из точки А в точку А = )
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36258379
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vantyzЯ делаю на http://apex.oracle.com смею предположить, что там 11G?
Да, там 11g. Но в следующий раз вместо вопроса выполните:
Код: plaintext
select * from v$version
чтобы убрать сомнения. :)
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36258414
vantyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извените, я просто все там посмотрел, но версии не нашел, а про команду эту не подумал (только начинаю с запросами). Сейчас вот с Pivot разбераюсь, я сам разберусь, мне хотелось бы узнать, могу ли я пользоваться этой структурой, если у меня колонки не заданы жестко (во всех примерах, которые я пока видел, предполагается, что мы знаем значения перевернутых колонок)?
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36258416
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vantyz,

да, сможете. Вот хорошие пример: Oracle Database 11g: The Top New Features for DBAs and Developers - Pivot and Unpivot .
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36258427
Фотография Ales Protiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по документации выражение pivot_in предусматривает вариант не с перечислением значений, а c subquery - должно было бы помочь. Но короткие эксперименты результатов не дали :(
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36258437
vantyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В pivot можно использовать
select * from (
select times_purchased, state_code
from customers t
)
pivot xml
(
count(state_code)
for state_code in (any)
)
order by times_purchased


Но мне упорно выбивает
TIMES_PURCHASED STATE_CODE_XML
1 [unsupported data type]
2 [unsupported data type]
4 [unsupported data type]
10 [unsupported data type]

В документации указано:
The output comes back as CLOB so make sure the LONGSIZE is set to a large value before running the query.

SQL> set long 99999

Но после выполнения этого запроса, я получаю:
ORA-00922: отсутствует или неверна опция
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36258445
vantyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select * from (
select times_purchased as "Puchase Frequency", state_code
from customers t
)
pivot xml
(
count(state_code)
for state_code in (select state_code from preferred_states)
)
order by 1

В вспомогательной таблице preferred_states всего один элемент, получаю сообщение
ORA-00918: столбец определен неоднозначно
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36258989
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ales ProtivСудя по документации выражение pivot_in предусматривает вариант не с перечислением значений, а c subquery - должно было бы помочь. Но короткие эксперименты результатов не дали :(

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
WITH t0 AS (SELECT LEVEL n FROM dual CONNECT BY LEVEL <=  20 )
   , t AS (SELECT t1.n n, t2.n m, decode(t1.n, t2.n,  1 ) eq FROM t0 t1, t0 t2)
SELECT *
  FROM t
pivot xml
 ( count(eq)
   for n in (SELECT LEVEL n FROM dual CONNECT BY LEVEL <=  20 ));

WITH t0 AS (SELECT LEVEL n FROM dual CONNECT BY LEVEL <=  20 )
   , t AS (SELECT t1.n n, t2.n m, decode(t1.n, t2.n,  1 ) eq FROM t0 t1, t0 t2)
SELECT *
  FROM t
pivot xml
 ( count(eq)
   for n in (ANY));

Работает и так, и так. Главное, распарсить потом в приемлемый вид.
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36259053
Фотография Ales Protiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересовал как раз обычный pivot, не xml.
Вобщем ясно - в этих pivot'ах ничего нового: раньше то же самое делалось с decode и xmlagg.
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36259132
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ales ProtivИнтересовал как раз обычный pivot, не xml.
Вобщем ясно - в этих pivot'ах ничего нового: раньше то же самое делалось с decode и xmlagg.

По доке подзапрос и ANY поддерживаются только в XML-варианте пайвота. И - да, это просто ради удобства. :) Может быть, стремятся задать направление очередному SQL:20XX...

ТС, всё же Вам проще будет собрать строку запроса в PL/SQL, чем парсить XML, кмк.
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36259273
vantyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините еще раз, что спрашиваю очевидные вещи, мы можем сами комбинировать строку запроса? т.е. я смогу сделать перечисление требуемых колонок и использовать обычный pivot, для динамического? Если бы я делал не через APEX, то проблем бы не возникло, делаем запрос, получаем список колонок, собираем запрос для Pivot, а вот, что делать в этом случае, мы какой-то язык программирования можем использовать в APEX и вставлять функции прямо в SourseTable?
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36259382
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vantyz,

Вы можете вставить в Source для отчёта либо сам запрос, либо PL/SQL-блок, возвращающий строку запроса. Например . Вот PL/SQL-блок Вам и нужно состряпать (лучше, как возвращающий строку-результат хранимой в БД функции).
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36260822
vantyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю в виде хранимой функции, но не могу понять, как мне ее в Sourse вставить? или как отлаживать хотябы?
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36260827
vantyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Sourse пишу
begin return 'select * from PREFERRED_STATES'; end;
или
COLS;
получаю ошибку
Query cannot be parsed within the Builder. If you believe your query is syntactically correct, check the ''generic columns'' checkbox below the region source to proceed without parsing. ORA-06550: Строка 1, столбец 50: PLS-00103: Встретился символ "end-of-file" в то время как ожидалось одно из следующих: ; <идентификатор> <идентификатор с двойными кавычками-разделителями> Символ ";" заменен на "end-of-file", чтобы можно было продолжать.
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36260840
vantyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Куда вставлять я разобрался, вставлял в Table, вставил в Report и все, но теперь не понятно как вставлять, у меня есть функция которая возвращает строку запроса (COLS), в Sourse стоит вставлять
begin COLS; end; ?
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36260857
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vantyzКуда вставлять я разобрался, вставлял в Table, вставил в Report и все, но теперь не понятно как вставлять, у меня есть функция которая возвращает строку запроса (COLS), в Sourse стоит вставлять
Код: plaintext
begin COLS; end;
?
Да. Ваша функция должна возвращать текст запроса. Отладка простая: в SQL Commands вызов функции вида
Код: plaintext
1.
2.
begin
  dbms_output.put_line(COLS);
end;
Копируете запрос, пробуете выполнить. Выводит то, что надо - отлично.

Я так понимаю, "под рукой" у Вас Oracle нет, только apex.oracle.com?
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36260864
vantyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ, сейчас засел за теорию по PL\SQL, чтобы вопросов глупых поменьше задавать, Oracle есть, но я его настраивал, под виртуальной машиной и на нетбуке, вообщем там так тормозит все, что ужас просто.
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36260888
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vantyz,

Oracle XE поставьте, для тестов в Вашем случае - с головой. Без всяких виртуалок, просто на ОС Вашей машины, читая руководство по установке (если понадобиться).
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36260897
vantyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а там настроено уже Apex?
...
Рейтинг: 0 / 0
Хранение и редактирование графа
    #36260905
vantyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел только 10G, а Вы писали, что пивот, только в 11G есть
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Хранение и редактирование графа
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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