Firebird insert into select

Firebird insert into select

There are various approaches. For example, if you wish to insert these:

2 two
4 four
5 five

you can use UNIONs (with Firebird 2.0 and above):

INSERT INTO table1 (col1, col2)
SELECT 2, ‘two ‘ FROM RDB$DATABASE UNION ALL
SELECT 4, ‘four’ FROM RDB$DATABASE UNION ALL
SELECT 5, ‘five’ FROM RDB$DATABASE;

Please note that datatypes must match, especially in older Firebird versions. In the above example, ‘four’ and ‘five’ are varchar(4), while ‘two’ would evaluate to varchar(3) and you would get an error. To work around this, you can use CAST or, in this case, add anoter space after the word: two, to make it ‘two ‘.

You can also use EXECUTE BLOCK (with Firebird 2.0 and above):

set term ^ ;
EXECUTE BLOCK AS BEGIN
INSERT INTO table1 (col1, col2) VALUES (2, ‘two’);
INSERT INTO table1 (col1, col2) VALUES (4, ‘four’);
INSERT INTO table1 (col1, col2) VALUES (5, ‘five’);
END^

Инструменты пользователя

Инструменты сайта

Боковая панель

Введение

Статьи и часто задаваемые вопросы

Установка и настройка

Обработка ошибок

Полезные запросы SQL

Тематические группы

Содержание

Версии сервера

Firebird v0.9 Firebird v1.0 Firebird v1.5 Firebird v2.0

Формат

Аргумент Описание
INTO Имя существующей таблицы или вида, в которую вставляются данные.
col Имя существующего столбца в таблице или виде, в который вставляются значения.
VALUES ( [, …] Список значению для вставки в таблицу или вид. Значения должны быть в том же порядке, как целевые столбцы.
RETURNING [INTO ] Только для Firebird 2.0 и выше.
Запрос, который возвращает значения, для вставки в целевые столбцы.
Список возвращаемых доменов объекта. только Firebird v2.0 и выше
Список переменных в которые будут помещены возвращаемые домены объекта. только Firebird v2.0 и выше
Читайте также:  Как протянуть телевизионный кабель по квартире

Описание

INSERT добавляет одну или более новых строк данных к существующей таблице или виду. INSERT — одна из привилегий базы данных, которая контролируется инструкциями GRANT и REVOKE.

Значения вставляются в столбцы строки по порядку их следования, если не задан факультативный список столбцов. Если список столбцов задан на множестве всех доступных столбцов, во все неперечисленные столбцы автоматически вcтавляется или значение по умолчанию, или NULL.

Если факультативный список столбцов упущен, предложение VALUES должно содержать значения для всех столбцов таблицы.

Чтобы вставить одну строку данных, должно присутствовать предложение VALUES и содержать определенный список значений.

Чтобы вставить несколько строк данных, определите , которое возвращает уже существующие данные из другой таблицы. Выбранные строки должны соответствовать списку столбцов.

Допустимо выбирать из той же таблицы, в которую строки вставляются, но эта практика не рекомендуется, так как подобные действия могут привести к бесконечным вставкам строк (зацикливанию).

Пример

Следующая инструкция добавляет строку в таблицу, присваивает значения двум столбцам:

Следующая инструкция определяет значения, чтобы вставить в таблицу, используя инструкцию SELECT:

I’m writing a stored procedure. I know how to pass values from select into insert .

But, is it possible with INSERT INTO to use values and Select at the same time?

Создан 04 янв. 12 2012-01-04 04:32:58 user639478

It’s really tough to tell what you’re asking here. Can you show an example of what you’re doing? And your best guess at what you’re trying to do? – jadarnel27 04 янв. 12 2012-01-04 04:37:59

can I use VALUES and Select with Insert into in one statement ? – user639478 04 янв. 12 2012-01-04 04:54:52

1 ответ

I guess you want to use the resultset of a SELECT statement as a input of a INSERT statement? Yes, thats possible, see FB’s language reference. The part what probably causes your problem is that you don’t use the VALUES keyword in that case, the statement would look like

Читайте также:  System boot order not found

Or if you want to have both "constant values" (like in INSERT INTO . VALUES(. ) statement) and "dynamic values" (using SELECT statement as a source) in one statement then you can union them, ie

where constants is list of values of appropriate type.

UPDATE

OK, I guess what you want is actually something like

Создан 04 янв. 12 2012-01-04 05:07:27 ain

I am getting error: SQL error code = -104. Invalid command. count of column list and variable list do not match. I wrote my SQL in generic field names above in main thread — Please advise. thanks – user639478 05 янв. 12 2012-01-05 03:23:13

The error message ‘count of column list and variable list do not match’ is pretty clear, isn’t it? Your ‘INSERT’ statement lists 12 columns and thus each "source row" must have 12 columns too, and the type of those columns must match the target column’s type. But some of the ‘SELECT’ statements you union only have one column! You can use NULL or some other (constant) default value instead of field name for those fields your source table doesn’t have. – ain 05 янв. 12 2012-01-05 03:47:48

yes the msg is clear but I tried zeros in the first select only also RDB$DATABASE is something can not be concluded so thanks for the enlighten — I used zeros now like this: f_lookup_id,0,0 for first statement and 0, f_lookup_id, 0 and so on — but using UNION will not make zeros or null override real values ? – user639478 05 янв. 12 2012-01-05 04:19:44

also using Union will return multi-rows but I need one row only I tried FIRST but still getting multi-rows – user639478 05 янв. 12 2012-01-05 04:34:39

Читайте также:  Как открыть гугл фото на компьютере

See the updated answer, the select statements must be singelton selects (return only one row). – ain 05 янв. 12 2012-01-05 04:35:37

Many Thanks. this is what I need. – user639478 05 янв. 12 2012-01-05 22:15:47

BTW I still got multi-rows so I used First 1 is that correct ? – user639478 05 янв. 12 2012-01-05 23:57:16

If youre sure taht the first record is the one you need then yes, nothing wrong with it. – ain 06 янв. 12 2012-01-06 02:09:36

yes I added "order by" to make sure. thanks – user639478 06 янв. 12 2012-01-06 22:27:56

Ссылка на основную публикацию
Bq strike power 5000
Компания BQ Mobile объявила о начале продаж в России нового недорогого смартфона BQ-5059 Strike Power. Ключевой особенностью новинки стал аккумулятор...
Adblock detector