|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
Требуется редактировать граф и отображать в виде матрицы смежности: | Пункт_1 | Пункт_2 | Пункт_3 | Пункт_4.... | Пункт_1 | Вес11 | Вес12 | Вес13 | | Пункт_2 | Вес21 | Вес12 | Вес23 | | Пункт_3 | Вес31 | Вес32 | Вес33 | | Пункт_4 | Вес41 | Вес42 | Вес43 | ..... Как мне его следует хранить? Предполагал в виде списка. И как тогда выводить и редактировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2009, 20:07 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
vantyz, 0. Как хранить - Вам виднее. Направленный это граф или нет, что в нём является вершинами (просто АА12С или сущности с атрибутами), допустимы ли петли и рёбра с одинаковыми вершинами, но разными весами - от всего этого будет зависеть структура. 1. Как выводить и редактировать - это уже вопрос к заказчику, он (хотя бы подсознательно) знает, как ему удобнее. Или Вы для форума пишите приложение? :) Да, чтобы Вы сразу не шагнули в сторону табличных отчётов для отображения: даже матрица 100x100 с большими идентификаторами рёбер выглядеть будет не очень презентабельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2009, 20:28 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
Для института делаю. Граф будет однонаправленный, без петель, объемов больших не надо. Думаю табличка будет 20х20 максимум, поэтому и решил, что презентабельно будет выглядеть. Хочется именно таблицей, потому-что списком редактировать не проблема (а именно проблем и надо побольше). Я вот не могу понять, можем ли мы одним запросом сформировать таблицу, колонками, которой будут являться различные строки исходной таблицы (вершины графа), первая колонка будет дублировать названия всех колонок, а значения в строках будут веса ребер. Попытаюсь переформулировать: Граф задан списком, надо его одним запросом выразить матрицей смежности. Можем ли мы это выполнить? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2009, 21:04 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
vantyz, да, можем. В таком простом случае хранение - таблицы вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Насчёт вывода в виде матрицы смежности: какая версия Oracle Database у Вас? Если 11g, то есть встроенный оператор pivot, если более старая - Вам нужно будет собрать строку запроса циклом по вершинам в процедуре и вернуть её в апексовский регион-отчёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2009, 21:42 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
Я делаю на http://apex.oracle.com смею предположить, что там 11G? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2009, 22:19 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
Петель быть не должно, т.к. я буду модель авиа-бронирования делать (сильно упрощенную, до минимума), будет глупо выглядеть перелет из точки А в точку А = ) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2009, 22:25 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
vantyzЯ делаю на http://apex.oracle.com смею предположить, что там 11G? Да, там 11g. Но в следующий раз вместо вопроса выполните: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2009, 23:22 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
Извените, я просто все там посмотрел, но версии не нашел, а про команду эту не подумал (только начинаю с запросами). Сейчас вот с Pivot разбераюсь, я сам разберусь, мне хотелось бы узнать, могу ли я пользоваться этой структурой, если у меня колонки не заданы жестко (во всех примерах, которые я пока видел, предполагается, что мы знаем значения перевернутых колонок)? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 00:09 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
vantyz, да, сможете. Вот хорошие пример: Oracle Database 11g: The Top New Features for DBAs and Developers - Pivot and Unpivot . ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 00:16 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
Судя по документации выражение pivot_in предусматривает вариант не с перечислением значений, а c subquery - должно было бы помочь. Но короткие эксперименты результатов не дали :( ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 00:42 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
В 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: отсутствует или неверна опция ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 00:56 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
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: столбец определен неоднозначно ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 01:19 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
Ales ProtivСудя по документации выражение pivot_in предусматривает вариант не с перечислением значений, а c subquery - должно было бы помочь. Но короткие эксперименты результатов не дали :( Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Работает и так, и так. Главное, распарсить потом в приемлемый вид. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 11:54 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
Интересовал как раз обычный pivot, не xml. Вобщем ясно - в этих pivot'ах ничего нового: раньше то же самое делалось с decode и xmlagg. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 12:13 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
Ales ProtivИнтересовал как раз обычный pivot, не xml. Вобщем ясно - в этих pivot'ах ничего нового: раньше то же самое делалось с decode и xmlagg. По доке подзапрос и ANY поддерживаются только в XML-варианте пайвота. И - да, это просто ради удобства. :) Может быть, стремятся задать направление очередному SQL:20XX... ТС, всё же Вам проще будет собрать строку запроса в PL/SQL, чем парсить XML, кмк. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 12:35 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
Извините еще раз, что спрашиваю очевидные вещи, мы можем сами комбинировать строку запроса? т.е. я смогу сделать перечисление требуемых колонок и использовать обычный pivot, для динамического? Если бы я делал не через APEX, то проблем бы не возникло, делаем запрос, получаем список колонок, собираем запрос для Pivot, а вот, что делать в этом случае, мы какой-то язык программирования можем использовать в APEX и вставлять функции прямо в SourseTable? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 13:11 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
vantyz, Вы можете вставить в Source для отчёта либо сам запрос, либо PL/SQL-блок, возвращающий строку запроса. Например . Вот PL/SQL-блок Вам и нужно состряпать (лучше, как возвращающий строку-результат хранимой в БД функции). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 13:33 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
Делаю в виде хранимой функции, но не могу понять, как мне ее в Sourse вставить? или как отлаживать хотябы? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 22:47 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
В 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", чтобы можно было продолжать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 22:52 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
Куда вставлять я разобрался, вставлял в Table, вставил в Report и все, но теперь не понятно как вставлять, у меня есть функция которая возвращает строку запроса (COLS), в Sourse стоит вставлять begin COLS; end; ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 23:08 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
vantyzКуда вставлять я разобрался, вставлял в Table, вставил в Report и все, но теперь не понятно как вставлять, у меня есть функция которая возвращает строку запроса (COLS), в Sourse стоит вставлять Код: plaintext
Да. Ваша функция должна возвращать текст запроса. Отладка простая: в SQL Commands вызов функции вида Код: plaintext 1. 2.
Я так понимаю, "под рукой" у Вас Oracle нет, только apex.oracle.com? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 23:38 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
Спасибо за ответ, сейчас засел за теорию по PL\SQL, чтобы вопросов глупых поменьше задавать, Oracle есть, но я его настраивал, под виртуальной машиной и на нетбуке, вообщем там так тормозит все, что ужас просто. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 23:52 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
vantyz, Oracle XE поставьте, для тестов в Вашем случае - с головой. Без всяких виртуалок, просто на ОС Вашей машины, читая руководство по установке (если понадобиться). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2009, 00:25 |
|
Хранение и редактирование графа
|
|||
---|---|---|---|
#18+
а там настроено уже Apex? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2009, 00:32 |
|
|
start [/forum/topic.php?fid=50&msg=36258198&tid=1877209]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
others: | 275ms |
total: | 443ms |
0 / 0 |