Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Oracle DB - Как в условии IF вызвать ALTER TABLE? / 3 сообщений из 3, страница 1 из 1
01.10.2014, 15:36
    #38763467
alekseich.n
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle DB - Как в условии IF вызвать ALTER TABLE?
Добрый день.

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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
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)

что то не могу в инете найти нормальное объяснение.
Собственно вопросы:
- Почему не могу использовать?
- И как обойти?
...
Рейтинг: 0 / 0
01.10.2014, 15:40
    #38763473
alekseich.n
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle DB - Как в условии IF вызвать ALTER TABLE?
alekseich.n,

Да кстати судя по всему Create table так же не заработает..... как же быть...
...
Рейтинг: 0 / 0
01.10.2014, 17:25
    #38763702
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle DB - Как в условии IF вызвать ALTER TABLE?
alekseich.n,

Тынц
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Oracle DB - Как в условии IF вызвать ALTER TABLE? / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]