Просто удивление, если кто-либо может помочь с этим, у меня есть два оператора 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:
Я предполагаю, что это означает, что первый оператор не завершается, правильно... там что-нибудь, что я должен поместить промежуточный операторы, чтобы заставить его работать правильно?
Да, вам понадобится косая черта /
в строке после каждого конца ;
.
Oracle может принимать один оператор SQL или анонимный блок PL / SQL за раз. (В отличие от SQL Server, который может исключать пакет за раз.) Итак, у вас есть несколько вариантов.
Оберните два анонимных блока в другой анонимный блок:
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) ';
конец, если;
совершить;
конец;
конец;
Сообщите инструменту, который вы используете для отправки 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) ';
конец, если;
совершить;
конец;
/