#sql #oracle #plsql
#sql #Oracle #plsql
Вопрос:
Как я могу узнать длину курсора?
Мне нужно сделать что-то подобное:
For i in (select * from table)
loop
x := i.length
end loop;
Я имею в виду, мне нужно взять длину.
Возможно ли это в PL / SQL? Есть ли какой-нибудь способ это сделать?
Большое спасибо.
Комментарии:
1. Почему? В чем проблема, которую вы пытаетесь решить? Иногда имеет смысл что-то сделать, если запрос возвращает 0 строк, или что-то сделать в первой строке или в каждой n-й строке, ни в одной из которых не нужно знать, сколько строк в конечном итоге будет возвращено.
count(*)
Аналитическая функция будет работать (по стоимости), за исключением случаев, когда запрос возвращает 0 строк, и в этом случае цикл вообще не будет повторяться. Не уверен, является ли это проблемой или нет.
Ответ №1:
Невозможно попросить сам курсор сообщить вам его длину. Oracle не знает длину до тех пор, пока не получит все строки.
Это снизило бы производительность, но вы можете сделать в SQL курсора, например:
For i in (select t.*, count(*) over (partition by null) cursor_length from table t)
loop
x := i.cursor_length;
end loop;