Я не знаю, какой вопрос вы задаете, но здесь идет.
Если вы используете PL / SQL, как это?
declare
myvar varchar2(50);
begin
select fieldone
into myvar
from tbl_one;
end;
/
Ну, вы можете, если и только если , вы знаете, что оператор select может вернуть ровно одну строку; в качестве альтернативы вам потребуется обработка ошибок для исключений TOO_MANY_ROWS и NO_DATA_FOUND, которые возникли бы в противном случае.
При использовании явных курсоров (т. Е. Ключевого слова CURSOR) существует несколько операций с ним, которые управляют его поведением.
declare
myvar varchar2(50);
CURSOR L1 IS
SELECT fieldone FROM tbl_one ;
begin
OPEN L1;
FETCH L1 into myvar;
CLOSE L1;
end;
/
CURSOR L1...
- это объявление курсора. Это не что иное, как связывание статического оператора SQL, и все, что делает движок PL / SQL, это проверка синтаксической и контекстной достоверности SQL - есть ли пропущенные предложения? Может ли этот пользователь ВЫБРАТЬ из этой таблицы?
OPEN L1
открывает курсор, устанавливая точную точку в истории системы, которая будет отражать результаты. Любые последующие FETCH для этого курсора будут отражать данные на эту точную точку.
FETCH L1...
фактически возвращает первую / следующую строку этого результирующего набора, каким бы он ни был, в указанные вами переменные. Это может быть объявленная запись или список переменных.
CLOSE L1...
освобождает любые ресурсы, открытые вашим курсором; например, операции вставки / обновления / удаления, которые влияют на записи, вызывают отмену, в которой ваш пользовательский сеанс имеет объявленный интерес для чтения, поэтому отмену нельзя освободить или использовать повторно, пока вы не закроете курсор.