Каково различие между явными и неявными курсорами в Oracle?

Действительно сложно определить, чего вы хотите от вашей записи без предоставленного дизайна или каркаса, но я изначально предполагаю, что все происходит не так, как вы ожидаете, потому что .header-fixed-flex имеет только одного ребенка. Так что, возможно, установка flex: 1 или просто width: 100% на .header_nav заставит все работать так, как вам нравится.

25
задан Brian G 16 September 2008 в 16:12
поделиться

14 ответов

Неявный курсор - это курсор, автоматически созданный для вас Oracle при выполнении запроса. Код проще, но страдает от неэффективности

  • (стандарт ANSI определяет, что он должен извлекаться дважды, чтобы проверить, существует ли более одной записи)
  • уязвимость к ошибкам данных ( если вы когда-нибудь получите две строки, это вызовет исключение TOO_MANY_ROWS)

Пример

SELECT col INTO var FROM table WHERE something;

Явный курсор - это тот, который вы создаете сами. Он требует больше кода, но дает больше контроля - например, вы можете просто открыть-извлечь-закрыть, если вы хотите только первую запись и не заботитесь о том, есть ли другие.

Пример

DECLARE   
  CURSOR cur IS SELECT col FROM table WHERE something; 
BEGIN
  OPEN cur;
  FETCH cur INTO var;
  CLOSE cur;
END;
41
ответ дан 28 November 2019 в 17:55
поделиться

Курсор - это SELECTed окно в таблице Oracle, это означает, что группа записей присутствует в таблице Oracle и удовлетворяет определенным условиям. Курсор также может ВЫБРАТЬ все содержимое таблицы. С помощью курсора вы можете манипулировать столбцами Oracle, совмещая их в результате. Пример неявного курсора следующий:

BEGIN
   DECLARE
      CURSOR C1
      IS
         SELECT DROPPED_CALLS FROM ALARM_UMTS;

      C1_REC   C1%ROWTYPE;
   BEGIN
      FOR C1_REC IN C1
      LOOP
         DBMS_OUTPUT.PUT_LINE ('DROPPED CALLS: ' || C1_REC.DROPPED_CALLS);
      END LOOP;
   END;
END;
/

С FOR ... LOOP ... END LOOP вы автоматически открываете и закрываете курсор, когда все записи курсора были проанализированы.

Пример явного курсора следующий:

BEGIN
   DECLARE
      CURSOR C1
      IS
         SELECT DROPPED_CALLS FROM ALARM_UMTS;

      C1_REC   C1%ROWTYPE;
   BEGIN
      OPEN c1;

      LOOP
         FETCH c1 INTO c1_rec;

         EXIT WHEN c1%NOTFOUND;

         DBMS_OUTPUT.PUT_LINE ('DROPPED CALLS: ' || C1_REC.DROPPED_CALLS);
      END LOOP;

      CLOSE c1;
   END;
END;
/

В явном курсоре вы открываете и закрываете курсор явным образом, проверяя наличие записей и устанавливая условие выхода.

1
ответ дан 28 November 2019 в 17:55
поделиться

Google - ваш друг: http://docstore.mik.ua/orelly/oracle/prog2/ch06_03.htm

PL / SQL выдает неявный курсор всякий раз, когда вы выполняете оператор SQL непосредственно в своем коде, если в этом коде не используется явный курсор. Он называется «неявным» курсором, потому что вы, разработчик, явно не объявляете курсор для оператора SQL.

Явный курсор - это оператор SELECT, который явно определен в разделе объявлений вашего кода и в процессе ему присвоено имя. Нет явного курсора для операторов UPDATE, DELETE и INSERT.

1
ответ дан 28 November 2019 в 17:55
поделиться

С помощью явных курсоров вы можете полностью контролировать доступ к информации в базе данных. Вы сами решаете, когда ОТКРЫТЬ курсор, когда ВЫБРАТЬ записи из курсора (и, следовательно, из таблицы или таблиц в операторе SELECT курсора), сколько записей выбрать, и когда ЗАКРЫТЬ курсор. Информация о текущем состоянии вашего курсора доступна через проверку атрибутов курсора.

См. http://www.unix.com.ua/orelly/oracle/prog2/ch06_03.htm для получения подробной информации.

2
ответ дан 28 November 2019 в 17:55
поделиться

В ответ на первый вопрос. Непосредственно из документации Oracle

Курсор - это указатель на частную область SQL, в которой хранится информация об обработке конкретного оператора SELECT или DML.

3
ответ дан 28 November 2019 в 17:55
поделиться

В наши дни неявные курсоры более эффективны, чем явные курсоры.

http://www.oracle.com/technology/oramag/oracle/04-sep/o54plsql.html

http://asktom.oracle.com ? / Pls / asktom / F P = 100: 11: 0 :::: P11_QUESTION_ID: 1205168148688

3
ответ дан 28 November 2019 в 17:55
поделиться

Явный курсор - это тот, который вы объявляете, например:

CURSOR my_cursor IS
  SELECT table_name FROM USER_TABLES

Неявный курсор - это созданный для поддержки любого встроенного SQL, который вы пишете (статического или динамического).

3
ответ дан 28 November 2019 в 17:55
поделиться

1.CURSOR: Когда PLSQL выдает операторы sql, он создает приватную рабочую область для анализа и анализа. Выполнение оператора SQL называется курсором.

2. ПРЕДПОЛАГАЕТСЯ: когда любой исполняемый блок PL / SQL выдает инструкцию sql. PL / SQL создает неявный курсор и автоматически управляет средствами implcit open & amp; Закрыть имеет место. Он используется, когда оператор SQL возвращает только одну строку. Он имеет 4 атрибута: SQL% ROWCOUNT, SQL% FOUND, SQL% NOTFOUND, SQL% ISOPEN.

3. EXPLICIT: он создан & amp; управляется программистом. Это нужно каждый раз, когда явное открытие, выборка & amp; близко. Используется, когда оператор sql возвращает более одной строки. Он также имеет 4 атрибута: CUR_NAME% ROWCOUNT, CUR_NAME% FOUND, CUR_NAME% NOTFOUND, CUR_NAME% ISOPEN. Он обрабатывает несколько строк с помощью цикла. Программист также может передать параметр явному курсору.

  • Пример: явный курсор

& nbsp;

declare 
   cursor emp_cursor 
   is 
   select id,name,salary,dept_id 
   from employees; 
   v_id employees.id%type; 
   v_name employees.name%type; 
   v_salary employees.salary%type; 
   v_dept_id employees.dept_id%type; 
   begin 
   open emp_cursor; 
   loop 
   fetch emp_cursor into v_id,v_name,v_salary,v_dept_id; 
   exit when emp_cursor%notfound;
   dbms_output.put_line(v_id||', '||v_name||', '||v_salary||','||v_dept_id); 
   end loop;                    
   close emp_cursor; 
   end;
4
ответ дан 28 November 2019 в 17:55
поделиться

Явный курсор определяется как таковой в блоке объявления:

DECLARE 
CURSOR cur IS 
  SELECT columns FROM table WHERE condition;
BEGIN
...

неявный курсор вставляется непосредственно в блок кода:

...
BEGIN
   SELECT columns INTO variables FROM table where condition;
END;
...
18
ответ дан 28 November 2019 в 17:55
поделиться

Явный...

нечто курсора является выбором * от вздора; начните открытый выход выборки, когда близкий курсор yada yada yada

не использует их, используйте неявный

, нечто курсора является выбором * от вздора;

для n в цикле нечто x = n.some_column заканчивают цикл

, я думаю, что можно даже сделать это

для n в (выбор * от вздора) цикл...

Придерживаются неявный, они закрывают себя, они более читаемы, они делают жизнь легкой.

-2
ответ дан 28 November 2019 в 17:55
поделиться

Как указано в других ответах, неявные курсоры проще в использовании и менее подвержены ошибкам.

И Неявные и явные курсоры в Oracle PL / SQL показывают, что неявные курсоры также в два раза быстрее, чем явные.

Странно, что еще никто не упомянул Неявный для курсора LOOP :

begin
  for cur in (
    select t.id from parent_trx pt inner join trx t on pt.nested_id = t.id
    where t.started_at > sysdate - 31 and t.finished_at is null and t.extended_code is null
  )
  loop
    update trx set finished_at=sysdate, extended_code = -1 where id = cur.id;
    update parent_trx set result_code = -1 where nested_id = cur.id;
  end loop cur;
end;

Еще один пример для SO: PL / SQL FOR COOP LOOP .

Это намного короче, чем явная форма.

Это также обеспечивает хороший обходной путь для обновления нескольких таблиц из CTE .

0
ответ дан 28 November 2019 в 17:55
поделиться

Каждому SQL-оператору, выполняемому базой данных Oracle, связали курсор с ним, который является частной рабочей областью, чтобы хранить информацию обработки. Неявные курсоры неявно создаются сервером Oracle для всего DML и операторов SELECT.

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

0
ответ дан 28 November 2019 в 17:55
поделиться

В PL / SQL курсор является указателем на эту область контекста. Он содержит всю информацию, необходимую для обработки выписки.

Неявные курсоры: Неявные курсоры автоматически создаются Oracle при каждом выполнении оператора SQL, когда нет явного курсора для оператора. Программисты не могут контролировать неявные курсоры и информацию в них.

Явные курсоры: Явные курсоры являются определяемыми программистом курсорами для получения большего контроля над контекстной областью. Явный курсор должен быть определен в разделе объявлений блока PL / SQL. Он создается в операторе SELECT, который возвращает более одной строки.

Синтаксис для создания явного курсора:

CURSOR cursor_name IS select_statement; 
1
ответ дан 28 November 2019 в 17:55
поделиться

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

1
ответ дан 28 November 2019 в 17:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: