Sql 将“选择”和“值”与“插入到”一起使用
我正在写一个存储过程。我知道如何将值从Sql 将“选择”和“值”与“插入到”一起使用,sql,sql-insert,firebird,Sql,Sql Insert,Firebird,我正在写一个存储过程。我知道如何将值从select传递到insert 但是,使用INSERT INTO是否可以同时使用值和选择值 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), :
select
传递到insert
但是,使用INSERT INTO
是否可以同时使用值和选择值
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);
我猜您想使用SELECT
语句的结果集作为INSERT
语句的输入?是的,这是可能的,看。可能导致您出现问题的部分原因是您没有使用VALUES
关键字。在这种情况下,语句如下所示
INSERT INTO table (fields) SELECT ...
或者,如果希望在一条语句中同时包含“常量值”(如插入到…值(…)
语句)和“动态值”(使用选择语句作为源),则可以合并它们,即
INSERT INTO table (fields)
SELECT fields FROM tab_src ...
UNION
SELECT constants FROM RDB$DATABASE
其中,常量
是适当类型的值列表
更新
好吧,我猜你想要的其实是
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))
)
很难说出你在问什么。你能举例说明你在做什么吗?你能猜出你想做什么吗?我能在一条语句中使用值并选择Insert into吗?我得到一个错误:SQL错误代码=-104。无效命令。列列表和变量列表的计数不匹配。我在上面的主线程中用通用字段名编写了SQL-请告知。感谢错误消息列列表和变量列表的计数不匹配
非常清楚,不是吗?您的INSERT
语句列出了12列,因此每个“源行”也必须有12列,并且这些列的类型必须与目标列的类型匹配。但是您联合的一些SELECT
语句只有一列!对于源表中没有的字段,您可以使用NULL或其他(常量)默认值来代替字段名。是的,消息是明确的,但我在第一个select only中尝试了零。RDB$数据库也无法得出结论,因此感谢您的启发-我现在使用零,如下所示:f_lookup_id,0,0表示第一个语句,0,f_lookup_id、0等等-但使用UNION不会使零或null覆盖实际值?同样使用UNION将返回多行,但我只需要一行我先尝试了,但仍然得到多行查看更新的答案,select语句必须是Singleton selects(仅返回一行)。