db2 -7008即使承诺控制设置为 *NONE,sqlrpgle中仍出现错误

x33g5p2x  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(175)

我有一个SQLRPGLE程序,它使用exec sql执行删除操作。问题是我得到了一个-7008的sqlcod,即使我已经编译了程序,并将提交设置为 *NONE,而且,我试图在语句末尾添加“with none”,但似乎没有任何效果。
有什么办法吗?

更新日期:

因此,问题似乎出现了,因为我试图从中删除的表似乎是具有依赖表的父表。
但令我困惑的是,依赖表已经被清空了,它没有任何数据,为什么会出错?

Parent table :
  create table grid_details                               
    (id integer not null generated always as identity       
        (start with 1 increment by 1) 
        PRIMARY KEY,              
    grid_name varchar(20),                                  
    grid_description varchar(40),                           
    source_file_name varchar(30),                           
    created_date date default current_date,                 
    created_by varchar(30),                                 
    last_updated_date date default current_date,            
    updated_by varchar(30));     

Parent table :                               
  create table action_code_details
    (id integer not null generated always as                                    
        identity (start with 1 increment by 1)                 
        PRIMARY KEY,
    action_code varchar(10),                   
    action_description varchar(40),
    required_input clob,    
    end_point clob,
    created_date                            
    date default current_date,
    created_by varchar(30),      
    last_updated_date date default current_date,
    updated_by varchar(30));                  

Child table :
  create table grid_action_details
    (id integer not null                 
        generated always as identity (start with 1 increment by 1)                                        
        PRIMARY KEY,
    grid_details_id integer,
    foreign key(grid_details_id) references grid_details(id),
    action_code_details_id integer,          
    foreign key(action_code_details_id) references action_code_details(id),
    action_code_status varchar(2),    
    created_date date default                                            
    current_date,
    created_by varchar(30),                                 
    last_updated_date date default current_date,
    updated_by varchar(30),
    required_parameter clob);

我可以删除子表中的所有内容,但不能删除父表中的所有内容。
当我试图通过CLRPFM清除父表时发现了这个问题。我不明白这个问题,因为子表没有数据。那么为什么父表没有被清除呢?

ugmeyewa

ugmeyewa1#

您得到的原因代码是什么?应该作为消息文本的一部分返回。
原因代码为:
1.-- &1没有成员.
1.-- &1已被保存,存储空间空闲.
1.-- &1未记入日记帐,没有日记帐权限,或日记帐状态为 *STANDBY. RI约束操作为CASCADE,SET NULL或SET DEFAULT的文件必须记入同一日记帐.
1.和第5页
1.-- &1在生产库中或正在生产库中创建,但用户具有调试模式UPDPROD(*NO)。
1.--正在创建架构,但用户处于调试模式,并具有UPDPROD(*NO)。
1.--创建视图时使用的基于表无效。该表是程序描述的表,或者位于临时架构中。
1.-- Based-on表驻留在与所创建对象ASP不同的ASP中。
1.--索引当前被占用或无效。
1.--正在向无效类型的表添加约束或触发器,或已达到最大触发器数,或分布式表的所有节点不在同一版本级别。
1.--正在架构QTEMP中创建分布式表,或者正在多个分布式表上创建视图。
1.--无法在QTEMP、QSYS、QSYS 2或SYSIBM中创建表,因为它包含具有FILE LINK CONTROL选项的DATALINK类型的列。
1.--数据表包含与数据字典恩怨的DATALINK、LOB或XML数据行。
1.--无法将DATALINK、LOB、XML或IDENTITY列添加到非SQL表中。
1.--试图使用其他ASP中的提交定义创建或更改对象。
1.--&2中的序列&1被CL命令错误修改。
1.--该表不可用,因为它包含部分事务.

编辑

因此,原因代码3的更正为
在&1(STRJRNPF)上启动日记帐,获取日记帐访问权限,或将日记帐状态更改为 *ACTIVE(CHGJRN)。
通常,当你尝试使用提交控制并且文件没有被记录时,就会抛出这段代码。但是你提到你已经用commit(*NONE)编译了,甚至在你的语句中添加了with none。因此,问题可能在于表被记录了,并且记录状态是 *STANDBY。我不相信记录本身会有权限问题。

编辑2

实际上,看一下 *STANDBY

  • STANDBY大多数日记帐分录不会存入日记帐。如果试图将分录存入日记帐,则不会出现指示未存入分录的错误。在 *STANDBY状态下,可以启动或停止日记帐。但是,在 *STANDBY状态下,不允许使用提交控制。由于不允许提交控制,也不允许系统在内部使用提交控制的函数。同样,在日志记录到处于 *STANDBY状态的日志的文件上生成的访问路径将不符合系统管理的访问路径保护的条件(SMAPP)。当系统尝试达到指定的访问路径恢复时间时,这可能会影响系统性能、系统IPL或独立辅助存储池(IASP)vary-on持续时间,或者同时影响系统性能和IPL或vary-on持续时间。注意:不能为远程日记指定此值。

看起来DELETE不应该有问题,除非正在使用提交控制,或者除非文件具有带CASCADE、SET NULL或SET DEFAULT操作的RI约束。

相关问题