У меня проблема при создании представлений с процедурой, потому что Oracle игнорирует порядок столбцов, который я указал.
Я создаю текст команды для создания представления в цикле (в каждом цикле по одному представлению), в конце просмотра я выполняю EXECUTE IMMEDIATE textOfCommand;
Я пытался добавить /*+ORDERED */
перед выбором но это не помогло.(Я также пытался запускать запросы напрямую, а не из процедуры)
Сгенерированная команда сама по себе хороша, также column_id
хороша, но она игнорируется в oracle developer или в geomedia.Я думаю, что это будет что-то с оптимизацией запроса, потому что в запросе есть несколько объединений.
Я просто не могу понять, почему это так непредсказуемо, порядок иногда хороший, иногда нет (если я запускаю одну и ту же команду несколько раз), это не зависит от вида, это абсолютно случайно, и я не могувыяснить в чем причина.Если у вас есть идея, пожалуйста, поделитесь ею.Спасибо
РЕДАКТИРОВАТЬ:
У меня проблема с порядком столбцов (не строк), которые отображаются в Oracle Developer, а также Geomedia.Когда я нажимаю на вкладку «Столбцы» в Oracle Developer, a может видеть все столбцы представления с хорошим COLUMN_ID, но они не упорядочены по этому столбцу.Я думал, что это просто так, что разработчик оракула отображает это, но и другие программы имеют проблемы с этим.Если я запускаю команду выбора, порядок хороший.Я не возражаю против заказа в Oracle Developer, но проблема в программном обеспечении клиента (Geomedia).
Вот пример сгенерированного SQL, который создается процедурой, а затем запускается командой EXECUTE IMMEDIATE в конце.каждого цикла в процедуре.: (есть что-то около 100 таких представлений. Таблицы, столбцы и заказы взяты из одной таблицы конфигурации, которая определяет все это. И я использую GDOSYS.GPICKLISTS для определения FK и таблиц, которые должны быть объединены)
CREATE OR REPLACE FORCE VIEW "SOME_VIEW" AS
SELECT /*+ORDERED */ a.ID AS "ID",
a8.TEXT_EN AS "COLUMN_NAME_1",
a.COLUMN_NAME_2 AS "COLUMN_NAME_2",
a.COLUMN_NAME_3 AS "COLUMN_NAME_3",
to_char(a.COLUMN_NAME_4,'yyyymmdd') AS "COLUMN_NAME_4",
to_char(a.COLUMN_NAME_5,'yyyymmdd') AS "COLUMN_NAME_5",
to_char(a.COLUMN_NAME_6,'yyyymmdd') AS "COLUMN_NAME_6",
to_char(a.COLUMN_NAME_7,'yyyymmdd') AS "COLUMN_NAME_7",
a.COLUMN_NAME_8 AS "COLUMN_NAME_8",
a.COLUMN_NAME_9 AS "COLUMN_NAME_9",
a.COLUMN_NAME_10 AS "COLUMN_NAME_10",
to_char(a.COLUMN_NAME_11,'yyyymmdd') AS "COLUMN_NAME_11",
a9.TEXT_EN AS "COLUMN_NAME_12",
a10.TEXT_EN AS "COLUMN_NAME_13",
a.COLUMN_NAME_14 AS "COLUMN_NAME_14",
a11.TEXT_EN AS "COLUMN_NAME_15",
FROM SOME_TABLE a
LEFT JOIN IENC.TABLE1 a8 on a8.id = a.COLUMN_NAME_1
LEFT JOIN IENC.TABLE2 a9 on a9.id = a.COLUMN_NAME_12
LEFT JOIN IENC.TABLE3 a10 on a10.id = a.COLUMN_NAME_13
LEFT JOIN IENC.TABLE4 a11 on a11.id = a.COLUMN_NAME_15