Объявить курсор в командном режиме sqlplus - PullRequest
1 голос
/ 20 января 2012

У меня есть файл SQL, в котором используется объявление курсора, и я запускаю его с помощью @abc, но он не выполнил все операторы и ждал без возврата в командную строку. Это не продолжалось после объявления оператора курсора. Когда я попытался запустить оператор объявления курсора в командном режиме, снова возникла та же проблема. Я могу вернуться к SQL priompt только после нажатия Ctrl + C. Я очень новичок в мире SQL. Хотя это может быть основной ошибкой, я не могу найти решение ни на одном сайте. Любая помощь с благодарностью.

SQL> DECLARE CURSOR id_cursor IS SELECT id FROM user_names WHERE dept_no = 1002 
AND BITAND(flags, 4) = 4 AND time_created BETWEEN 1137974400 AND 1326067199;
  2
  3
  4  ;
  5
  6

Ответы [ 2 ]

6 голосов
/ 20 января 2012

Все DECLARE и BEGIN блоки в SQL * Plus должны заканчиваться / в новой пустой строке:

SQL> DECLARE
  2    CURSOR c IS SELECT 1 FROM DUAL;
  3  BEGIN
  4     NULL;
  5  END;
  6  /

PL/SQL procedure successfully completed.

Без этого / SQL * Plus не может знать, что ваш оператор завершился (поэтому в вашем примере он ожидает ввода данных пользователем).

3 голосов
/ 20 января 2012

После ; введите / и введите. Это запустит ваш оператор PL / SQL. Но образец, который вы дали, ничего не делает, кроме объявления курсора. Затем вы должны использовать его так:

declare
  cursor ID_CURSOR is
    select ID
      from USER_NAMES
     where DEPT_NO = 1002
           and bitand(FLAGS, 4) = 4
           and TIME_CREATED between 1137974400 and 1326067199;
begin
  for REC in ID_CURSOL loop
    <do something with your data>;
  end loop;
end;
/
...