Как запустить Oracle в SQLFiddle

Я новичок в Oracle SQL. Я получил фрагмент кода из Интернета и вставил его в sqlfiddle (http://sqlfiddle.com/):

Для схемы я создал временную таблицу, которая будет использоваться в sql-запросе:

CREATE Global Temporary TABLE temp
 (id number
 ,x number)
 ,y CHAR(50))
 ON COMMIT DELETE ROWS;

Я щелкнул схему сборки, которая говорит мне «Схема готова».

Затем я вставляю следующий запрос с официального сайта Oracle на правой панели:

-- available online in file 'sample1'
DECLARE
   x NUMBER := 100;
BEGIN
   FOR i IN 1..10 LOOP
      IF MOD(i,2) = 0 THEN     -- i is even
         INSERT INTO temp VALUES (i, x, 'i is even');
      ELSE
         INSERT INTO temp VALUES (i, x, 'i is odd');
      END IF;
      x := x + 100;
   END LOOP;
   COMMIT;
END;

Когда я нажимаю запустить sql, он возвращает ошибки:

ORA-06550: строка 3, столбец 18: PLS-00103: обнаружен символ "конец файла" при ожидании одного из следующих: * & = - + ; ‹ / > at in is mod остаток не rem ‹> или != или ~= >= ‹= ‹> и или подобное like2 like4 likec между || член мультимножества


person user1816353    schedule 22.12.2015    source источник


Ответы (1)


Вам нужно изменить терминатор запроса по умолчанию ([;]) на sth, отличный от ;, и вам может потребоваться добавить этот разделитель и новую строку между блоками кода:

введите здесь описание изображения

SqlFiddleDemo

DECLARE
   x NUMBER := 100;
BEGIN
   FOR i IN 1..10 LOOP
      IF MOD(i,2) = 0 THEN     
         INSERT INTO temp VALUES (i, x, 'i is even');
      ELSE
         INSERT INTO temp VALUES (i, x, 'i is odd');
      END IF;
      x := x + 100;
   END LOOP;
   COMMIT;
END;

Что с этим [ ; ] под каждой панелью?

Эта непонятная маленькая кнопка определяет, как разбиваются запросы в каждой из панелей перед их отправкой в ​​базу данных. Эта кнопка открывает раскрывающийся список, в котором перечислены различные терминаторы запросов. Ограничители запросов используются в качестве флага, указывающего (если они присутствуют в конце строки), что текущий оператор завершен. Терминатор не отправляется в базу данных; вместо этого он просто указывает, как мне следует анализировать текст перед выполнением запроса.

Часто вам не нужно будет прикасаться к этой кнопке; основное значение этой функции будет заключаться в определении хранимых процедур. Это связано с тем, что часто бывает так, что в определении тела хранимой процедуры вы можете захотеть закончить строку точкой с запятой (это часто бывает). Поскольку мой терминатор запроса по умолчанию также является точкой с запятой, у меня нет очевидного способа увидеть, что точка с запятой вашей хранимой процедуры на самом деле не является концом запроса. Оставшись с точкой с запятой в конце, я бы разбил ваше определение процедуры на неправильные части, и это, безусловно, привело бы к ошибкам. Изменение терминатора запроса на что-то отличное от точки с запятой позволяет избежать этой проблемы.

person Lukasz Szozda    schedule 22.12.2015
comment
Не могли бы вы описать, с чего вы его меняете и на что? И как его изменить? Простое нажатие на эту ссылку не говорит мне, что мне нужно изменить... - person DaveyDaveDave; 22.12.2015
comment
Большое спасибо lad2025. Это действительно помогает мне, потому что вы знаете, что на начальном уровне программирования все неправильно приведет к тому, что все испортится, и нет подсказки, чтобы решить эту проблему. - person user1816353; 22.12.2015
comment
@user1816353 user1816353 Не забудьте принять мой ответ: ) и удачи в обучении PL/SQL - person Lukasz Szozda; 22.12.2015
comment
Я изменил терминатор запроса, который является последним значком, на / и добавил / в конце моего запроса, после чего запрос работает. Спасибо еще раз! - person user1816353; 22.12.2015
comment
@user1816353 user1816353 Аккуратно напоминаю, что ответ все еще не принят - person Lukasz Szozda; 23.12.2015
comment
Я собираюсь скопировать скрипку в вопрос на случай, если она когда-нибудь исчезнет. - person Nick.McDermaid; 15.07.2021