Порядок столбцов в представлении Oracle игнорируется - PullRequest
0 голосов
/ 21 декабря 2011

У меня проблема при создании представлений с процедурой, потому что 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 

Ответы [ 2 ]

0 голосов
/ 21 декабря 2015

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

SELECT /*+ORDERED */ a.ID AS "ID",  => SELECT /*+ORDERED */ a.ID AS ID, 
0 голосов
/ 25 июля 2012

Я предполагаю, что то, что "непредсказуемо", похоже на

SELECT column_name, data_type, column_id
FROM user_tab_cols
WHERE table_name = 'SOME_VIEW';

Если вы хотите упорядочить строки по некоторому столбцу, вы должны явно добавить предложение ORDER BY.

SELECT column_name, data_type, column_id
FROM user_tab_cols
WHERE table_name = 'SOME_VIEW'
ORDER BY column_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...