create table table1
(a integer,
b integer);
create table table2
(a integer,
b integer);
*/
SET TERM !! ;
create procedure proc1
as
DECLARE VARIABLE a INTEGER;
DECLARE VARIABLE b INTEGER;
begin
select count(*), max(a) into :a, :b from table1;
select * into table2 from table1;
end !!
SET TERM ; !!
"select into" в InterBase
Есть скрипт
Код:
При этом на into нахолдиться ошибка "мол не известное(не подходящее) слово", но в справке такой пример рассматривается....
Не подскажите в чём дело????
Код:
insert into table2 (a,b) values (select a,b from table1)
а так не прокатит?
Код:
select table1.* into table2 from table1;
И паралельный вопросы
1. Есть таблица в которой значения ключевого поля генерируются генератором.
Как в ОДНОМ запросе вставить запись(и) и получить значения сгенерированнго(ых) ключа(ей)?
2. Возможно ли в качестве источника данных одного запроса использовать другой? "select * from (select * from temp)" У меня не получилось..
У меня InterBase 6
Сзаранее спасибо!
В стандарте SQL оператор insert может содержать предложение returning:
Код:
insert into table1
(name)
values
('Имя')
returning
id
into
:new_id
(name)
values
('Имя')
returning
id
into
:new_id
[QUOTE=misha_turist]
2. Возможно ли в качестве источника данных одного запроса использовать другой? "select * from (select * from temp)" У меня не получилось.[/QUOTE]
Такая конструкция есть в стандарте SQL.
Возможно, обе конструкции не поддерживаются в Interbase. Увы!
select из select'а четко работает, тока нафига оно надо - лично мне не понятно.
Классический пример для Oracle - транспонирование матрицы (перевод строк в столбцы):
Код:
select
max(OSNOVA1), max(STAVKA1), max(SUMMA1), max(VID1), max(SYS_PL1)
from(
select
decode(ROWNUM, :NN, OSNOVA, NULL) OSNOVA1,
decode(ROWNUM, :NN, STAVKA, NULL) STAVKA1,
decode(ROWNUM, :NN, SUMMA, NULL) SUMMA1,
decode(ROWNUM, :NN, VID, NULL) VID1,
decode(ROWNUM, :NN, SYS_PL, NULL) SYS_PL1
from
V_GOODS_TAXES
where
GOODS_ID = :GID
)
max(OSNOVA1), max(STAVKA1), max(SUMMA1), max(VID1), max(SYS_PL1)
from(
select
decode(ROWNUM, :NN, OSNOVA, NULL) OSNOVA1,
decode(ROWNUM, :NN, STAVKA, NULL) STAVKA1,
decode(ROWNUM, :NN, SUMMA, NULL) SUMMA1,
decode(ROWNUM, :NN, VID, NULL) VID1,
decode(ROWNUM, :NN, SYS_PL, NULL) SYS_PL1
from
V_GOODS_TAXES
where
GOODS_ID = :GID
)
На кривые имена полей не обращаем внимания - делалось для совместимости с унаследованным кодом. Запрос взят из реального проекта.
Во первых isert into использовать нельзя т.к. значения возвращаются в переменную, а isert into пошет только в таблици...
Во вторых у меня IB, а не Oracle...))))))
В третьих returning в IB нет...
Подскажите как быть, а то у меня из-за этих проблем один проект стоит....
В Interbase есть какие-то средства, позволяющие делать запрос к процедуре, и оператор suspend. Возможно, тебе стоит задать вопрос на специализированном сайте по IB.