Как я могу узнать длину курсора в PL / SQL

#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;