Oracle : из одной записи вернуть несколько строк,можно?
union
select 2 from dual
union
select 3 from dual
...и т.п.
Пример
Поле1 | Поле2 |
1 2 3 | 1 |
2 5 | 2 |
взависимости от значения поля2 получить либо 2 либо три записи,как результат моего запроса
http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DIS...
Описанная там хранимая процедура должна помочь.
Описанная там хранимая процедура должна помочь.
дай плз поточнее ссылку =)
Спасиб,так и думал,что надо будет табличнуй функцию делать =)
можно и запросом: ботай иерархии и в частности функцию SYS_CONNECT_BY_PATH
SYS_CONNECT_BY_PATHчто то мне кажется это немного не то,иерархические запросы тут ни причем.
Просто надо условно строку распарсить в несколько значений и вернуть их как отдельные записи.
извратиться всегда можно, если найдено несколько решений - есть из чего выбрать!
все зависит от целей, Oracle большой
а с помощью оракловых функций решение можно всегда найти....ну, практически всегда
Просто надо условно строку распарсить в несколько значений и вернуть их как отдельные записи
![](/images/graemlins/smile.gif)
Присоединяюсь. Можно подробнее?
![](/images/graemlins/smile.gif)
с нетерпением ждем =)
function ReadInteger(data in blob, pos in out binary_integer) return binary_integer is
l_val RAW(4);
l_size binary_integer := 4;
begin
dbms_lob.read(data, l_size, pos, l_val);
pos := pos + l_size;
return utl_raw.cast_to_binary_integer(l_val, utl_raw.little_endian);
end;
procedure WriteInteger(val in binary_integer, data in out blob, pos in out binary_integer) is
not_null_val binary_integer;
l_val RAW(4);
l_size binary_integer := 4;
begin
not_null_val := NVL( val, 0 );
l_val := UTL_RAW.cast_from_binary_integer(not_null_val, UTL_RAW.little_endian);
DBMS_LOB.write(data, l_size, pos, l_val);
pos := pos + l_size;
end;
и т.д. для остальных типов данных
Создается блоб, туда все пишется, потом читается в таком же порядке. Можно придумать ухищрения для устойчивости и последующей поддержки (писать флаги, затем читать только то, на что указывают флаги, это поможет для поддержки разных версий).
Можно сделать аналог EOF
function EOF(data in blob, pos in binary_integer) return boolean is
begin
return pos > DBMS_LOB.GETLENGTH(data);
end;
тогда можно читать произвольное количество данных заданного типа/формата.
Оставить комментарий
wwoland
Суть в том,что есть некоторое текстовое поле, содержащее составные данные,например массив чисел. Например : '1 2 3 4 5'Вопрос: возможно ли как нибудь с помощью запроса вернуть пять записей , в каждой из которых будет одно из чисел.
ну или хотя бы с помощью функции?