Informix SQL / 在表中插入存储过程的结果

Posted

技术标签:

【中文标题】Informix SQL / 在表中插入存储过程的结果【英文标题】:Informix SQL / insert result of stored procedure in table 【发布时间】:2015-08-05 09:34:24 【问题描述】:
kassa_akt_revizii_parser('','','') returns field(per_monets_5,per_monets_10,per_monets_25,per_monets_50,per_rub_1,per_rub_5,per_rub_10,per_rub_25,per_rub_50,per_rub_100,per_rub_200,per_rub_500,per_val_376,per_val_428,per_val_498,per_val_643,per_val_840,per_val_978,per_val_980)

我们需要插入一个表格:

insert into kassa_akt_revizii_pereschet(
id_akt_revizii,per_monets_5,per_monets_10,per_monets_25,per_monets_50,
per_rub_1, per_rub_5, per_rub_10, per_rub_25, per_rub_50,
per_rub_100, per_rub_200, per_rub_500,per_val_376, 
per_val_428, per_val_498, per_val_643, per_val_840,
per_val_978, per_val_980)
values(50, kassa_akt_revizii_parser('','',''));

INSERT 中的列数与 VALUES 的数量不匹配

【问题讨论】:

insert into kassa_akt_revizii_pereschet( id_akt_revizii, .......) select 50, t.* from kassa_akt_revizii_parser('','','') t 出现语法错误。 【参考方案1】:

INSERT 中的列数与 VALUES 的数量不匹配

您的错误消息只是表示虽然插入(列)与您要插入的(值)数量不匹配。

再次检查并再次插入。

插入查询:

insert into tablename (column1,column2,...column50) values (value1,value2...value50)

【讨论】:

如何插入?如果它对语法发誓【参考方案2】:

试试这个方法:

INSERT INTO kassa_akt_revizii_pereschet(
    id_akt_revizii,
    per_monets_5,
    per_monets_10,
    per_monets_25,
    per_monets_50,
    per_rub_1, 
    per_rub_5, 
    per_rub_10, 
    per_rub_25, 
    per_rub_50,
    per_rub_100, 
    per_rub_200, 
    per_rub_500,
    per_val_376, 
    per_val_428, 
    per_val_498, 
    per_val_643, 
    per_val_840,
    per_val_978, 
    per_val_980
)
SELECT 50, *
FROM TABLE(kassa_akt_revizii_parser('','',''));

例子:

[infx1210@tardis ~]$ dbaccess -e db1 test.sql

Database selected.

CREATE TABLE tab1( col1 INT, COL2 INT, COL3 INT);
Table created.



CREATE FUNCTION sp1() RETURNING INT, INT
        RETURN 1, 2;
END FUNCTION;
Routine created.

;

INSERT INTO tab1 VALUES (0, sp1());
  236: Number of columns in INSERT does not match number of VALUES.
Error in line 7
Near character position 26


INSERT INTO tab1
SELECT 1, *
FROM TABLE(sp1());
1 row(s) inserted.



SELECT * FROM tab1;

       col1        col2        col3

          1           1           2

1 row(s) retrieved.



Database closed.

[infx1210@tardis ~]$

【讨论】:

以上是关于Informix SQL / 在表中插入存储过程的结果的主要内容,如果未能解决你的问题,请参考以下文章

从存储过程结果集中在表上插入/更新数据

如何使用 PL/SQL 中的过程在表中插入多个值?

如何在sql创建一条插入数据的存储过程

SQL Server 中存储过程之后的执行顺序

将 XML 数据存储在表中的 PL/SQL 过程抛出错误(23,102):PL/SQL:ORA-00907:缺少右括号

Informix 脚本中的局部变量