gpt4 book ai didi

sql - SQL插入SQLRPGLE后无法更新文件

转载 作者:行者123 更新时间:2023-12-05 09:15:09 25 4
gpt4 key购买 nike

大家好,

我正在编写一个程序来构建一个报告,我在其中构建 SQL 语句以将选定的记录插入到文件中,然后在插入之后我想对文件进行简单的更新以更改某些记录中的选择字段。

问题是在运行插入后,每当我尝试更新文件时,我都会收到记录或文件正在使用错误。

我尝试使用 sqlrpgle 和 I/O 读取和设置函数以编程方式更新它,我什至尝试在运行程序后仅更新 STRSQL 中的文件,但我都遇到了同样的错误。

我怀疑我没有正确关闭某些东西,但我不确定是什么。

代码如下

// Assign SQL Query

sqlstmt = 'insert into jallib/orhsrpt ('+
'oacctd, oacmp, oaord, oacust, o8type, ' +
'o8text, o8date, o8time ) ' +
'select oacctd, oacmp, oaord, oacust, ' +
'o8type, o8text, o8date, o8time ' +
'from r50files.vcohead ' +
'join r50files.vcopkct ' +
'on oacmp = o8cmp and oaord = o8ord ' +
'where oacmp = 1 ' +
'and o8type not in (' +
'''C'',''a'',''H'',''E'',''F'', '+
'''A'',''1'',''N'',''M'') ' +
'and oacctd = ' + curdate +
' order by oaord, o8time ';

// Prepare for multiple sql statements

exec sql
Set Option Commit = *NONE;

// Clear output file before executing SQL

exec sql
Delete from jallib/orhsrpt;

if sqlcode < *zeros;
errmsg = 'Delete of file failed';
endif;

// Execute SQL Insert statement

exec sql prepare sqlsel from :sqlstmt;
exec sql execute sqlsel;

if sqlcode < *zeros;
errmsg = 'Insert of file failed';
endif;

// Update file data

exec sql
Set Option clossqlcsr = *ENDMOD;

exec sql
Update jallib/orhsrpt
set o8text = 'Order Invoiced'
where o8type = 'I'

STRSQL报错如下

Row or object ORHSRPT in JALLIB type *FILE in use.

最佳答案

快速回答是插入未关闭,因为您的模块尚未根据您指定的 Set Option 结束。但是,这里的正确答案是您根本没有理由使用动态 SQL 语句。它们通常速度较慢且更容易出错,您会遇到这样的问题。您应该改用如下常规的嵌入式 SQL 语句:

exec sql
set option commit = *NONE;

// Clear output file before executing SQL

exec sql
delete from jallib/orhsrpt;

if sqlstate <> *zeros;
errmsg = 'Delete of file failed';
endif;

exec sql
insert into jallib/orhsrpt (
oacctd, oacmp, oaord, oacust,
o8type, o8text, o8date, o8time )
select oacctd, oacmp, oaord, oacust, o8type,
o8text, o8date, o8time
from r50files.vcohead join r50files.vcopkct
on oacmp = o8cmp and oaord = o8ord
where oacmp = 1 and o8type not in (
'C','a','H','E','F', 'A','1','N','M') and
oacctd = :curdate
order by oaord, o8time;

exec sql
update jallib/orhsrpt
set o8text = 'Order Invoiced'
where o8type = 'I'

这是更好的做法,应该可以解决您的问题。

关于sql - SQL插入SQLRPGLE后无法更新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52971065/

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