Понятное дело, для неизвестного количества записей.
Прошу прощения, когда писал свой пост имел ввиду специальный случай с которым часто приходилось иметь дело. Есть таблица:
CREATE TABLE EXAMPLE_TABLE
(
PKEY VARCHAR2(25 BYTE),
LINE_NUM NUMBER(10),
DSCR VARCHAR2(50 BYTE)
);
ALTER TABLE EXAMPLE_TABLE ADD (
CONSTRAINT PK_EXAMPLE_TABLE
PRIMARY KEY
(PKEY, LINE_NUM)
);
В таблице поле LINE_NUM - счетчик, часть primary key, и заранее известно что все время начинается с 1 и увеличивается на 1 без пробелов. Нужно произвести "fixed length" ASCII файл в следущем формате:
RECORD_ID X(25)
RECORD_DSCR1 X(50)
RECORD_DSCR2 X(50)
RECORD_DSCR3 X(50)
RECORD_DSCR4 X(50)
RECORD_DSCR5 X(50)
RECORD_DSCR6 X(50)
RECORD_DSCR7 X(50)
RECORD_DSCR8 X(50)
Решалось таким образом:
SELECT ET1.PKEY,
ET1.dscr D1,
ET2.dscr D2,
ET3.dscr D3,
ET4.dscr D4,
ET5.dscr D5,
ET6.dscr D6,
ET7.dscr D7,
ET8.dscr D8
FROM EXAMPLE_TABLE ET1
left outer join EXAMPLE_TABLE ET2 on ET2.PKEY = ET1.PKEY and ET2.LINE_NUM = 2
left outer join EXAMPLE_TABLE ET3 on ET3.PKEY = ET1.PKEY and ET3.LINE_NUM = 3
left outer join EXAMPLE_TABLE ET4 on ET4.PKEY = ET1.PKEY and ET4.LINE_NUM = 4
left outer join EXAMPLE_TABLE ET5 on ET5.PKEY = ET1.PKEY and ET5.LINE_NUM = 5
left outer join EXAMPLE_TABLE ET6 on ET6.PKEY = ET1.PKEY and ET6.LINE_NUM = 6
left outer join EXAMPLE_TABLE ET7 on ET7.PKEY = ET1.PKEY and ET7.LINE_NUM = 7
left outer join EXAMPLE_TABLE ET8 on ET8.PKEY = ET1.PKEY and ET8.LINE_NUM = 8
WHERE ET1.LINE_NUM = 1
Естественно, количество полей выходящего файла заранее известно. Но в этом и суть моего первого поста в теме -- практика всегда отличается от теории. Napoleon так и не привел реального примера бизнес-требования которое решается поворотом таблицы на 90.