Перейти к содержимому

Фотография

можно ли использовать переменную в имени колонки?..


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1 Astashonok

Astashonok

    Новый участник

  • Members
  • Pip
  • 37 сообщений

Отправлено 25 марта 2008 - 14:45

я только начал работать с SQL...
надо сделать следующее...
надо создать несколько колонок... поступает кол-во...
например, N...
примерно так должно:

[codebox]
declare N integer;

BEGIN

FOR N IN 1..2 LOOP
alter table MYTP_RESULT add <Имя_Колонки>&N integer NULL;
END LOOP;
END;
/
[/codebox]
только так не работает... кто подскажет?..
заранее спасибо...
  • 0
  • Зачем идти в разработчики, когда столько кайфа в тестировании?!

#2 LEk

LEk

    Новый участник

  • Members
  • Pip
  • 65 сообщений
  • ФИО:Екатерина
  • Город:Новосибирск

Отправлено 26 марта 2008 - 04:47

[codebox]
declare N integer;
BEGIN
FOR N IN 1..2 LOOP
execute immediate 'alter table MYTP_RESULT add <Имя_Колонки>' || N || ' integer default NULL';
END LOOP;
END;
[/codebox]
  • 0

#3 Astashonok

Astashonok

    Новый участник

  • Members
  • Pip
  • 37 сообщений

Отправлено 26 марта 2008 - 08:40

declare N integer;BEGIN	FOR N IN 1..2 LOOP		execute immediate 'alter table MYTP_RESULT add <Имя_Колонки>' || N || ' integer default NULL';	END LOOP;END;


:acute: спасибо большое... работает...

тема закрыта...
  • 0
  • Зачем идти в разработчики, когда столько кайфа в тестировании?!

#4 Astashonok

Astashonok

    Новый участник

  • Members
  • Pip
  • 37 сообщений

Отправлено 26 марта 2008 - 13:30

declare N integer;BEGIN	FOR N IN 1..2 LOOP		execute immediate 'alter table MYTP_RESULT add <Имя_Колонки>' || N || ' integer default NULL';	END LOOP;END;



пардон ещё раз...
намучался...
как сделать следующее... я примерно напишу...

declare N integer;BEGIN	FOR N IN 1..2 LOOP   execute immediate 'alter table MYTP_RESULT add <Имя_Колонки>' || N || ' integer default NULL';  /*тут создается колонка*/   INSERT INTO MYTEMP_RESULT ('<Имя_Колонки>' || N ) SELECT nameID FROM tableID WHERE MYROWNUM=N; /*а тут надо внести в эту колонку значение из выбоки*/	END LOOP;END;

:acute:
  • 0
  • Зачем идти в разработчики, когда столько кайфа в тестировании?!

#5 LEk

LEk

    Новый участник

  • Members
  • Pip
  • 65 сообщений
  • ФИО:Екатерина
  • Город:Новосибирск

Отправлено 27 марта 2008 - 04:49

аналогично
[codebox]
declare N integer;
BEGIN
FOR N IN 1..2 LOOP
execute immediate 'alter table MYTP_RESULT add <Имя_Колонки>' || N || ' integer default NULL'; /*тут создается колонка*/
execute immediate 'INSERT INTO MYTEMP_RESULT (<Имя_Колонки>' || N || ') SELECT nameID FROM tableID WHERE MYROWNUM= :x' using N; /*а тут надо внести в эту колонку значение из выбоки*/
END LOOP;
END;
[/codebox]
  • 0

#6 Astashonok

Astashonok

    Новый участник

  • Members
  • Pip
  • 37 сообщений

Отправлено 27 марта 2008 - 08:31

аналогично

declare N integer;BEGIN	FOR N IN 1..2 LOOP   execute immediate 'alter table MYTP_RESULT add <Имя_Колонки>' || N || ' integer default NULL';  /*тут создается колонка*/   execute immediate 'INSERT INTO MYTEMP_RESULT (<Имя_Колонки>' || N || ') SELECT nameID FROM tableID WHERE MYROWNUM= :x' using N; /*а тут надо внести в эту колонку значение из выбоки*/	END LOOP;END;



спасибо... я так пробовал... только не знал про using N... а теперь работает... только... когда N=2, то он подставляет значение выборки не в первую стпоку, а во вторую...
как сделать так, чтобы вывадил все в одной строке?..
P.S. если я Вас ещё не достал)))
  • 0
  • Зачем идти в разработчики, когда столько кайфа в тестировании?!

#7 Astashonok

Astashonok

    Новый участник

  • Members
  • Pip
  • 37 сообщений

Отправлено 27 марта 2008 - 10:38

пробовал так

execute immediate 'INSERT AT 1 INTO MYTEMP_RESULT (Link_Type_' || N || ') SELECT MYLT FROM MYTEMP WHERE MYROWNUM= :x' using N;

но ругается:
[1]: (Error): ORA-00925: missing INTO keyword ORA-06512: at line 5
  • 0
  • Зачем идти в разработчики, когда столько кайфа в тестировании?!

#8 LEk

LEk

    Новый участник

  • Members
  • Pip
  • 65 сообщений
  • ФИО:Екатерина
  • Город:Новосибирск

Отправлено 27 марта 2008 - 11:26

аналогично

declare N integer;BEGIN	FOR N IN 1..2 LOOP   execute immediate 'alter table MYTP_RESULT add <Имя_Колонки>' || N || ' integer default NULL';  /*тут создается колонка*/   execute immediate 'INSERT INTO MYTEMP_RESULT (<Имя_Колонки>' || N || ') SELECT nameID FROM tableID WHERE MYROWNUM= :x' using N; /*а тут надо внести в эту колонку значение из выбоки*/	END LOOP;END;



спасибо... я так пробовал... только не знал про using N... а теперь работает... только... когда N=2, то он подставляет значение выборки не в первую стпоку, а во вторую...
как сделать так, чтобы вывадил все в одной строке?..
P.S. если я Вас ещё не достал)))

Используйте оператор UPDATE вместо INSERT.
declare N integer;BEGIN	FOR N IN 1..2 LOOP   execute immediate 'alter table MYTP_RESULT add <Имя_Колонки>' || N || ' integer default NULL';    execute immediate 'UPDATE MYTEMP_RESULT SET <Имя_Колонки>' || N || ' = (SELECT nameID FROM tableID WHERE MYROWNUM= :x)' using N; 	END LOOP;END;
Пример установит значения для всех cуществующих строк в таблице
  • 0

#9 Astashonok

Astashonok

    Новый участник

  • Members
  • Pip
  • 37 сообщений

Отправлено 27 марта 2008 - 15:41

LEk, Спасибо огромное... я Ваш должник)))
пока тема закрыта)))
  • 0
  • Зачем идти в разработчики, когда столько кайфа в тестировании?!


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных