今天测试存储过程的时候碰到这个报错:
SQL0668N Operation not allowed for reason code "3" on table "CALSS_STUDENT". SQLSTATE=57016.
原因出处:
存储过程执行到这一步的时候就报错了。
CALL SYSPROC.ADMIN_CMD('LOAD FROM (SELECT TODAY'
||',STUDENT'
||',CALSS_NO'
||',TEACHER'
||'FROM CALSS_STUDENT_TEMP'
||') OF CURSOR REPLACE INTO CALSS_STUDENT_SUM ('
||'DAT'
||',STUDENT_NAME'
||',CALSS_NO'
||',TEACHER_NAME'
||')NONRECOVERABLE');
ps:这段SQL只是对表进行一个LOAD操作,通过select 表将查询结果插入到另外一张表中,用的是REPLACE INTO 跟hive 中的insert overwrite 类似。
报错解释:
SQLCODE:-668 错误状态码,不允许对标 “表名” 执行操作,限制对表 “表名” 的访问。
code "3":原因码3,表处于“装入暂挂”状态,先前尝试装入(LOAD)此表失败。在重新启动或终止 LOAD 操作之前不允许对表访问。
SQLSTATE:57016 错误类代码,含义因为表不活动,所以不能对其进行访问。
code "3"用户响应:通过分别发出带有 RESTART 或 TERMINATER选项的 LOAD 来重新启动或终止先前失败的对此表的LOAD操作。
处理方式:
按照提示的话我在这句SQL 执行前将表进行一个 置空 处理,代码如下:
CALL SYSPROC.ADMIN_CMD('load from /dev/null of del replace into CALSS_STUDENT_SUM NONRECOVERABLE')
ps:/dev/null 代表空设备文件,/dev/null 是 Unix/Linux 里的【无底洞】,任何的 output 送去了【无底洞】就再也没了。包括LOAD喇,LOAD一个【无底洞】LOAD了个寂寞。
其他SQLCODE:-668 的原因码以及其他报错的错误状态码可以在下面 IBM 的链接查看。
👇👇👇👇👇👇👇👇👇👇👇
SQL0500 - SQL0749 - IBM Documentationhttps://www.ibm.com/docs/en/db2/11.1?topic=messages-sql0500-sql0749#sql0668n有需要文档的同学也可以私信我~