Параллелизм курсора оракула с вставкой stmt

результат курсора определяется во время открытия ? но следующая демонстрация показывает разницу:

drop table Highschooler;
drop table w;
create table Highschooler( grade int );
create table w( grade int );

insert into Highschooler(grade) values (13);
insert into Highschooler(grade) values(14);
insert into Highschooler(grade) values (15);
insert into w values (16);

select * from Highschooler;
select * from w;

create or replace create function ff(a int) return int is 
   total int := 0;
begin
  select  count(grade) into total from w where grade > a ;
  return total;
end;

DECLARE
   my_var int :=0;
   my_var2 int := 0;
   my_var3 int := 0;
   CURSOR CC IS select ff(grade) from Highschooler for update;
BEGIN
   open CC;
   fetch CC into my_var;
   insert into w values (16);
   fetch CC into my_var2;
   fetch CC into my_var3;
   dbms_output.put_line(my_var || '  - '  || my_var2 || ' - ' || my_var3);
   close CC;
end;

выходы:

GRADE
13
14
15
Download CSV
3 rows selected.

Result Set 4
GRADE
16
Statement processed. ------- the insert stmt in 'insert into w values (16);' affect the cursor's output here
1  - 2 - 2

Не могли бы вы свести свой пример только к соответствующей части, то есть к одной таблице с одной вставкой и выборкой курсора, и описать более подробно, какую разницу вы заметили?

Marmite Bomber 12.12.2020 20:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ваша функция содержит еще один курсор, который открывается только во время выполнения. Вот почему обычно не следует использовать функции только для выполнения SQL — в итоге вы получите логически поврежденные данные, поскольку каждое выполнение будет использовать другую точку SCN.

выполнение курсора завершилось, когда его открытый курсор вернулся? если это так, функция в курсоре также завершается. если нет, курсор продолжит свое выполнение после открытия, пока он не будет закрыт? или функция, вызываемая только для каждого результата курсора, была извлечена? если это причина, почему результат курсора не набор результатов select stmt, а значение перед вызовом функции? спасибо за ответ :)

Chinaxing 13.12.2020 09:43

Определите курсор без использования функции, такой как

CURSOR CC IS 
select  (select  count(grade) from w where grade > h.grade) as ff 
from Highschooler h;

Это приведет к ожидаемому результату

1  - 1 - 1

Также обратите внимание, что отказ от использования функций приведет к повышению производительности, поскольку вы опускаете переключение контекста.

да, что меня смущает, так это использование функции, влияющей на результат, когда курсор был изменен

Chinaxing 18.12.2020 08:07

Другие вопросы по теме