2012-01-04 3 views
2

Я пишу хранимую процедуру. Я знаю, как передавать значения от select до insert.Firebird - использование Select и значения с помощью Insert into

Но возможно ли использовать values и Select в то же время?

Insert into table_1 (f1, f2, f3, f4, f5, f6, f7, f8, f9, 
     FL1, FL2, FL3) 

     Select :p_f1, :v_f2, :p_f3, :p_f4, 
     abs(:v_f5 * :p_f5), 
     abs(:v_f6 * :p_f6), 
     :v_f7, :v_f8, :v_9 from RDB$DATABASE 
     UNION 
     Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id1) 
     UNION 
     Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id2) 
     UNION 
     Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id3); 
+1

Это действительно трудно сказать, что вы спрашиваете здесь. Можете ли вы показать пример того, что вы делаете? И ваше лучшее предположение о том, что вы пытаетесь сделать? – jadarnel27

+0

Могу ли я использовать VALUES и Select with Insert into в одном заявлении? – user639478

ответ

5

Я предполагаю, что вы хотите использовать в виде результирующего SELECT заявления как вход INSERT заявления? Да, это возможно, см. FB's language reference. Часть, что, вероятно, вызывает проблему в том, что вы не используете VALUES ключевое слово в этом случае заявление будет выглядеть

INSERT INTO table (fields) SELECT ... 

Или, если вы хотите иметь как «постоянные значения» (как в INSERT INTO ... VALUES(...) заявлении) и «динамические значения» (с использованием SELECT заявления в качестве источника) в одном операторе, то вы можете их профсоюзу, т.е.

INSERT INTO table (fields) 
    SELECT fields FROM tab_src ... 
    UNION 
    SELECT constants FROM RDB$DATABASE 

constants, где находится список значений соответствующего типа.


UPDATE

Хорошо, я предполагаю, что вы хотите на самом деле что-то вроде

Insert into table_1 (f1, f2, f3, f4, f5, f6, f7, f8, f9, FL1, FL2, FL3) 
VALUES(:p_f1, :v_f2, :p_f3, :p_f4, 
     abs(:v_f5 * :p_f5), 
     abs(:v_f6 * :p_f6), 
     :v_f7, :v_f8, :v_9, 
     (Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id1)), 
     (Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id2)), 
     (Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id3)) 
) 
+0

Я получаю ошибку: код ошибки SQL = -104. Недопустимая команда. Количество списков столбцов и список переменных не совпадают. Я написал свой SQL в именах общих полей выше в основной теме. Пожалуйста, сообщите. спасибо – user639478

+0

Сообщение об ошибке «подсчет списка столбцов и списка переменных не соответствует» довольно ясно, не так ли? В инструкции 'INSERT' перечислены 12 столбцов, и поэтому каждая« исходная строка »также должна иметь 12 столбцов, а тип этих столбцов должен соответствовать типу целевого столбца. Но некоторые из операторов SELECT, которые вы объединяете, имеют только один столбец! Вы можете использовать значение NULL или другое (постоянное) значение по умолчанию вместо имени поля для тех полей, в которых нет исходной таблицы. – ain

+0

yes, msg is clear, но я попробовал нули в первом select только RDB $ DATABASE что-то не может быть заключено, так что спасибо за просвещение - я использовал нули теперь вот так: f_lookup_id, 0,0 для первого оператора и 0, f_lookup_id , 0 и т. Д. - но использование UNION не приведет к нулям или нулевым переопределениям реальных значений? – user639478

 Смежные вопросы

  • Нет связанных вопросов^_^