gpt4 book ai didi

informix - Informix 脚本中的局部变量

转载 作者:行者123 更新时间:2023-12-02 01:48:09 28 4
gpt4 key购买 nike

我必须做一个大的更新脚本 - 而不是 SPL(存储过程)。它是为 Informix 数据库编写的。

它涉及将行插入到多个表中,每个表都依赖于前一个表的插入顺序。

我知道我可以通过这样做来访问该序列:

SELECT DISTINCT dbinfo('sqlca.sqlerrd1') FROM systables

但我似乎无法定义一个局部变量来在插入下一个表之前存储它。

我想这样做:

insert into table1 (serial, data1, data2) values (0, 'newdata1', 'newdata2');
define serial1 as int;
let serial1 = SELECT DISTINCT dbinfo('sqlca.sqlerrd1') FROM systables;
insert into table2 (serial, data1, data2) values (0, serial1, 'newdata3');

但是 Informix 当然会在定义行上卡住。

有没有办法做到这一点,而不必将其创建为存储过程,运行一次,然后删除该过程?

最佳答案

如果涉及的表中的列数与您的示例一样少,那么您可以将 SPL 永久化,并使用它来插入数据,即:

执行过程 insert_lated_tables('newdata1','newdata2','newdata3');

显然,这不能很好地扩展,但对于您的示例来说是可以的。

扩展 Jonathan 的示例并解决使用 MAX() 可能出现的任何并发问题的另一个想法是在 Table3 中包含 DBINFO('sessionid') >:

DELETE FROM Table3 WHERE sessionid = DBINFO('sessionid');
INSERT INTO Table1 (...);
INSERT INTO Table3 (sessionid, value)
VALUES (DBINFO('sessionid'), DBINFO('sqlca.sqlerrd1'));
INSERT INTO Table2
VALUES (0, (SELECT value FROM Table3
WHERE sessionid = DBINFO('sessionid'), 'newdata3');
...

您还可以将 Table3 设为 TEMP 表:

INSERT INTO Table1 (...);
SELECT DISTINCT DBINFO('sqlca.sqlerrd1') AS serial_value
FROM some_dummy_table_like_systables
INTO TEMP Table3 WITH NO LOG;
INSERT INTO Table2 (...);

关于informix - Informix 脚本中的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6098021/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com