Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

"select into" в InterBase

286
28 сентября 2006 года
misha_turist
572 / / 28.11.2005
Доброго времени суток!

Есть скрипт
Код:
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 ; !!


При этом на into нахолдиться ошибка "мол не известное(не подходящее) слово", но в справке такой пример рассматривается....

Не подскажите в чём дело????
547
28 сентября 2006 года
Hydra
488 / / 20.06.2006
Странно. Вообще это делается так:
 
Код:
insert into table2 (a,b) values (select a,b from table1)
385
28 сентября 2006 года
SomewherSomehow
477 / / 25.07.2004
не обязательно так...можно и селектом инту вставлять записи...

а так не прокатит?
 
Код:
select table1.* into table2 from table1;
286
28 сентября 2006 года
misha_turist
572 / / 28.11.2005
Я представил демонстрационный (но проверенный) пример, мне просто нужно, что бы эта конструкция работала...


И паралельный вопросы

1. Есть таблица в которой значения ключевого поля генерируются генератором.
Как в ОДНОМ запросе вставить запись(и) и получить значения сгенерированнго(ых) ключа(ей)?
2. Возможно ли в качестве источника данных одного запроса использовать другой? "select * from (select * from temp)" У меня не получилось..


У меня InterBase 6
Сзаранее спасибо!
10
28 сентября 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE=misha_turist]Как в ОДНОМ запросе вставить запись(и) и получить значения сгенерированнго(ых) ключа(ей)?[/QUOTE]
В стандарте SQL оператор insert может содержать предложение returning:
 
Код:
insert into table1
  (name)
values
  ('Имя')
returning
  id
into
  :new_id


[QUOTE=misha_turist]
2. Возможно ли в качестве источника данных одного запроса использовать другой? "select * from (select * from temp)" У меня не получилось.[/QUOTE]
Такая конструкция есть в стандарте SQL.

Возможно, обе конструкции не поддерживаются в Interbase. Увы!
547
29 сентября 2006 года
Hydra
488 / / 20.06.2006
select из select'а четко работает, тока нафига оно надо - лично мне не понятно.
10
29 сентября 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE=Hydra]select из select'а четко работает, тока нафига оно надо - лично мне не понятно.[/QUOTE]
Классический пример для 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
  )

На кривые имена полей не обращаем внимания - делалось для совместимости с унаследованным кодом. Запрос взят из реального проекта.
286
29 сентября 2006 года
misha_turist
572 / / 28.11.2005
Спасибо всем конечно, но ответа я так и не получил.)))

Во первых isert into использовать нельзя т.к. значения возвращаются в переменную, а isert into пошет только в таблици...

Во вторых у меня IB, а не Oracle...))))))

В третьих returning в IB нет...

Подскажите как быть, а то у меня из-за этих проблем один проект стоит....
10
29 сентября 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE=misha_turist]В третьих returning в IB нет...[/QUOTE]
В Interbase есть какие-то средства, позволяющие делать запрос к процедуре, и оператор suspend. Возможно, тебе стоит задать вопрос на специализированном сайте по IB.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог