Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Oracle DB - Как в условии IF вызвать ALTER TABLE?  [new]
alekseich.n
Member

Откуда:
Сообщений: 71
Добрый день.

Пишу программку для накатывания модификаций и таблиц в БД.

IF (TableName = TableFind) THEN
  --БЛОК для модификации найденной таблицы.
    DBMS_OUTPUT.PUT_LINE('Таблица '||TO_CHAR(TableName)||' найдена. Модифицирую таблицу...');
    
            ALTER TABLE "GPB_AUDIT_CLIENT_FIZ" MODIFY "MODDATE" TIMESTAMP (6);
            ALTER TABLE "GPB_AUDIT_CLIENT_FIZ" ADD ("USERID" NUMBER (10,0));
          
    DBMS_OUTPUT.PUT_LINE('В таблице '||TO_CHAR(TableName)||' добавлены/модифицированы данные.');
  ELSE
  --БЛОК для создания ненайденной таблицы.
    DBMS_OUTPUT.PUT_LINE('Таблица '||TO_CHAR(TableName)||' ненайдена. Создаю таблицу...');
    
          CREATE TABLE "test_table" 
           ("PRTDATE" DATE, 
          "PRTTIME" DATE, 
          "PRTUSER" VARCHAR2(51 BYTE), 
          "PRTEVENT" VARCHAR2(151 BYTE), 
          "PRTREMARK" VARCHAR2(201 BYTE), 
          "SYSTIMESTAMP" DATE, 
          "CL_ID" NVARCHAR2(11), 
          "CL_SURNAME" NVARCHAR2(101), 
          "CL_NAME" NVARCHAR2(51), 
          "MODDATE" DATE, 
          "USERID" NUMBER(10,0)
           ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
          STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
          PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
          TABLESPACE "USERS" ;
          
    DBMS_OUTPUT.PUT_LINE('Таблица '||TO_CHAR(TableName)||' создана.');
  END IF;


Но вот не задача... вываливается ошибка.

Error report -
ORA-06550: Строка 15, столбец 13:
PLS-00103: Encountered the symbol "ALTER" when expecting one of the following:

( begin case declare exit for goto if loop mod null pragma
raise return select update while with
<идентификатор>
<идентификатор с двойными кавычками-разделителями>
<переменная привязки> << continue close
current delete fetch lock insert open rollback savepoint set
sql execute commit forall merge pipe purge
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:

Спотыкается на "ALTER" так как ожидает всё (begin case declare exit for goto if loop mod null pragma
raise return select update while with
<идентификатор>
<идентификатор с двойными кавычками-разделителями>
<переменная привязки> << continue close
current delete fetch lock insert open rollback savepoint set
sql execute commit forall merge pipe purge)

что то не могу в инете найти нормальное объяснение.
Собственно вопросы:
- Почему не могу использовать?
- И как обойти?
1 окт 14, 15:36    [16645078]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DB - Как в условии IF вызвать ALTER TABLE?  [new]
alekseich.n
Member

Откуда:
Сообщений: 71
alekseich.n,

Да кстати судя по всему Create table так же не заработает..... как же быть...
1 окт 14, 15:40    [16645096]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DB - Как в условии IF вызвать ALTER TABLE?  [new]
carrotik
Member

Откуда:
Сообщений: 1491
alekseich.n,

Тынц
1 окт 14, 17:25    [16646064]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить