можно ли использовать переменную в имени колонки?..
Автор Astashonok, 25 мар 2008 14:45
Сообщений в теме: 8
#1
Отправлено 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]
только так не работает... кто подскажет?..
заранее спасибо...
надо сделать следующее...
надо создать несколько колонок... поступает кол-во...
например, N...
примерно так должно:
[codebox]
declare N integer;
BEGIN
FOR N IN 1..2 LOOP
alter table MYTP_RESULT add <Имя_Колонки>&N integer NULL;
END LOOP;
END;
/
[/codebox]
только так не работает... кто подскажет?..
заранее спасибо...
- Зачем идти в разработчики, когда столько кайфа в тестировании?!
#2
Отправлено 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]
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]
#3
Отправлено 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;
спасибо большое... работает...
тема закрыта...
- Зачем идти в разработчики, когда столько кайфа в тестировании?!
#4
Отправлено 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;
- Зачем идти в разработчики, когда столько кайфа в тестировании?!
#5
Отправлено 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]
[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]
#6
Отправлено 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. если я Вас ещё не достал)))
- Зачем идти в разработчики, когда столько кайфа в тестировании?!
#7
Отправлено 27 марта 2008 - 10:38
пробовал так
но ругается:
[1]: (Error): ORA-00925: missing INTO keyword ORA-06512: at line 5
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
- Зачем идти в разработчики, когда столько кайфа в тестировании?!
#8
Отправлено 27 марта 2008 - 11:26
Используйте оператор 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 'INSERT INTO MYTEMP_RESULT (<Имя_Колонки>' || N || ') SELECT nameID FROM tableID WHERE MYROWNUM= :x' using N; /*а тут надо внести в эту колонку значение из выбоки*/ END LOOP;END;
спасибо... я так пробовал... только не знал про using N... а теперь работает... только... когда N=2, то он подставляет значение выборки не в первую стпоку, а во вторую...
как сделать так, чтобы вывадил все в одной строке?..
P.S. если я Вас ещё не достал)))
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уществующих строк в таблице
#9
Отправлено 27 марта 2008 - 15:41
LEk, Спасибо огромное... я Ваш должник)))
пока тема закрыта)))
пока тема закрыта)))
- Зачем идти в разработчики, когда столько кайфа в тестировании?!
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных