Два оператора PLSQL с начинаются и заканчиваются, хорошо работают отдельно, но не вместе?

Просто удивление, если кто-либо может помочь с этим, у меня есть два оператора PLSQL для того, чтобы изменить таблицы (добавляющий дополнительные поля), и они следующие:

-- Make GC_NAB field for Next Action By Dropdown

begin
if 'VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')>0 then
  execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10, ))';
elsif ('VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')=0) or
  'VARCHAR2' = 'VARCHAR2' then
  execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10))';
else
  execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2)';
end if;
commit;
end;

-- Make GC_NABID field for Next Action By Dropdown

begin
if 'NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')>0 then
  execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER(, ))';
elsif ('NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')=0) or
  'NUMBER' = 'VARCHAR2' then
  execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER())';
else
  execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER)';
end if;
commit;
end;

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

Error report:
ORA-06550: line 15, column 1:
PLS-00103: Encountered the symbol "BEGIN" 
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

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

7
задан Cœur 28 December 2016 в 16:57
поделиться

2 ответа

Да, вам понадобится косая черта / в строке после каждого конца ; .

8
ответ дан 6 December 2019 в 07:05
поделиться

Oracle может принимать один оператор SQL или анонимный блок PL / SQL за раз. (В отличие от SQL Server, который может исключать пакет за раз.) Итак, у вас есть несколько вариантов.

  1. Оберните два анонимных блока в другой анонимный блок:

     begin
     - Сделать поле GC_NAB для следующего действия в раскрывающемся списке
    начинать
    если 'VARCHAR2' = 'ЧИСЛО' и длина ('VARCHAR2')> 0 и длина ('')> 0, то
    выполнить немедленное изменение таблицы "SERVICEMAIL6". "ETD_GUESTCARE" добавить (GC_NAB VARCHAR2 (10,)) ';
    elsif ('VARCHAR2' = 'ЧИСЛО' и длина ('VARCHAR2')> 0 и длина ('') = 0) или
     'VARCHAR2' = 'VARCHAR2', затем
    немедленно выполнить 'изменить таблицу "SERVICEMAIL6". "ETD_GUESTCARE" добавить (GC_NAB VARCHAR2 (10))';
    еще
    выполнить немедленное изменение таблицы "SERVICEMAIL6". "ETD_GUESTCARE" добавить (GC_NAB VARCHAR2) ';
    конец, если;
    совершить;
    конец;
     - Сделайте поле GC_NABID для следующего действия в раскрывающемся списке
    начинать
    если 'ЧИСЛО' = 'ЧИСЛО' и длина ('ЧИСЛО')> 0 и длина ('')> 0, то
    выполнить немедленное изменение таблицы "SERVICEMAIL6". "ETD_GUESTCARE" добавить (GC_NABID NUMBER (,)) ';
    elsif ('ЧИСЛО' = 'ЧИСЛО' и длина ('ЧИСЛО')> 0 и длина ('') = 0) или
     'NUMBER' = 'VARCHAR2', затем
    выполнить немедленное изменение таблицы "SERVICEMAIL6". "ETD_GUESTCARE" добавить (GC_NABID NUMBER ()) ';
    еще
    выполнить немедленное изменение таблицы "SERVICEMAIL6". "ETD_GUESTCARE" добавить (GC_NABID NUMBER) ';
    конец, если;
    совершить;
    конец;
    конец;
    
  2. Сообщите инструменту, который вы используете для отправки PL / SQL в Oracle, чтобы он отправил два блока по отдельности. Как это сделать, зависит от конкретного инструмента.В SQL * PLUS / в отдельной строке выполнит следующее:

      - Сделать поле GC_NAB для следующего действия в раскрывающемся списке
    начинать
    если 'VARCHAR2' = 'ЧИСЛО' и длина ('VARCHAR2')> 0 и длина ('')> 0, то
    выполнить немедленное изменение таблицы "SERVICEMAIL6". "ETD_GUESTCARE" добавить (GC_NAB VARCHAR2 (10,)) ';
    elsif ('VARCHAR2' = 'ЧИСЛО' и длина ('VARCHAR2')> 0 и длина ('') = 0) или
     'VARCHAR2' = 'VARCHAR2', затем
    немедленно выполнить 'изменить таблицу "SERVICEMAIL6". "ETD_GUESTCARE" добавить (GC_NAB VARCHAR2 (10))';
    еще
    выполнить немедленное изменение таблицы "SERVICEMAIL6". "ETD_GUESTCARE" добавить (GC_NAB VARCHAR2) ';
    конец, если;
    совершить;
    конец;
     /
     - Сделайте поле GC_NABID для следующего действия в раскрывающемся списке
    начинать
    если 'ЧИСЛО' = 'ЧИСЛО' и длина ('ЧИСЛО')> 0 и длина ('')> 0, то
    выполнить немедленное изменение таблицы "SERVICEMAIL6". "ETD_GUESTCARE" добавить (GC_NABID NUMBER (,)) ';
    elsif ('ЧИСЛО' = 'ЧИСЛО' и длина ('ЧИСЛО')> 0 и длина ('') = 0) или
     'NUMBER' = 'VARCHAR2', затем
    выполнить немедленное изменение таблицы "SERVICEMAIL6". "ETD_GUESTCARE" добавить (GC_NABID NUMBER ()) ';
    еще
    выполнить немедленное изменение таблицы "SERVICEMAIL6". "ETD_GUESTCARE" добавить (GC_NABID NUMBER) ';
    конец, если;
    совершить;
    конец;
     /
    
17
ответ дан 6 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

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