Мне нужно запрограммировать запрос с заголовками столбцов. Сам запрос выполняется правильно сам по себе, а запрос фиктивного заголовка выполняется правильно. Запрос использует последовательность для последовательного номера строк (они представляют собой эквивалент позиций заказа), и если I UNION два запроса, я получаю «указанный порядковый номер (CURRVAL или NEXTVAL), является неуместным.Невозможно использовать последовательность в буферизованном запросе UNION
Заголовок 'запрос':
SELECT
'ITEM_NUMBER,
BM_NUMBER,
CREATION_DATE'
FROM DUAL;
запрос данных:
SELECT
seq.nextval||';'||
BM_NUMBER||';'||
CREATION_DATE
FROM BIG_TABLE;
Оба запуска и возвращения именно то, что я ожидал.
SELECT
'ITEM_NUMBER,
BM_NUMBER,
CREATION_DATE'
FROM DUAL
UNION
SELECT
seq.nextval||';'||
BM_NUMBER||';'||
CREATION_DATE
FROM BIG_TABLE;
возвращает ошибку. Я ожидал ошибку неявного преобразования типов и имел TO_CHAR() последовательность, которая не имела никакого значения и не была проблемой. Я также ожидал бы, что запрос данных будет полностью независим от запроса заголовка и, следовательно, не будет иметь никакого отношения к тому, как работает последовательность. Другими словами, я не понимаю, когда вызов seq.nextval знает или интересуется запросом заголовка, который предшествует ему.
Единственным обходным решением, о котором я достаточно острый, было бы сначала использовать запрос данных (с последовательностью) к INSERT в таблицу, затем UNION запрос заголовка с другим запросом к этой таблице (исключая необходимость используйте эту последовательность вообще в буферизованном запросе UNION. Я рад это сделать, но я хотел бы знать, почему мой текущий запрос завершается с ошибкой, и исправить его, не требуя при этом ненужных чтений/записей.
Решено. Я никогда не думаю, чтобы использовать rownum для чего угодно. В этом случае это не только работает, я считаю, что это действительно правильно - ITEM_NUMBER не имеет другого значения, чем предоставленный rownum, и нет смысла в порядке/последовательности. Надеюсь, я могу сказать большое спасибо. –