出现错误 ORA-01400:cannot insert NULL ... while inserting data with the help of rowtype
getting error ORA-01400:cannot insert NULL ... while inserting data with help of rowtype
我正在尝试在备份中插入数据 table 借助如下行类型
declare
vl_bkp_rec schema.table1%ROWTYPE;
BEGIN
FOR cur_rec IN
(SELECT *
FROM schema.table1
WHERE column_1 ='3f1d6348-014e-1000-8461-700c000493e0'
AND primary_key_column NOT IN ('8dc81f6e-0156-1000-8291-700e000493e0')
)
LOOP
INSERT INTO schema.backup_table VALUES vl_bkp_rec;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
lv_err_msg := SUBSTR(SQLERRM, 1, 2999);
DBMS_OUTPUT.PUT_LINE('Handled - error while executing script. =>'|| lv_err_msg );
ROLLBACK;
END;
/
我低于错误
Handled - error while executing script. =>ORA-01400: cannot insert NULL into ("schema"."backup_table"."primary_key_column")
但 table1
和 backup_table
具有完全相同的结构。 (创建 backup_table
如下)
CREATE TABLE schema.backup_table AS
(SELECT * FROM schema.table1 WHERE rownum <1
);
上面使用的 和 select 查询获取有效数据。我在这里做错了什么?
您需要按以下方式使用您的变量。当前在您的代码中,声明为 table 类型的变量未被填充:请参阅下文如何使用它。
declare
vl_bkp_rec table1%ROWTYPE;
BEGIN
FOR cur_rec IN
(SELECT *
FROM table1
)
LOOP
vl_bkp_rec:=cur_rec; --Assign values of the cursor variable to your variable
INSERT INTO backup_table VALUES vl_bkp_rec;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
--lv_err_msg := SUBSTR(SQLERRM, 1, 2999); ---you need to decalre it befor using it
DBMS_OUTPUT.PUT_LINE('Handled - error while executing script. =>' );
ROLLBACK;
END;
/
我正在尝试在备份中插入数据 table 借助如下行类型
declare
vl_bkp_rec schema.table1%ROWTYPE;
BEGIN
FOR cur_rec IN
(SELECT *
FROM schema.table1
WHERE column_1 ='3f1d6348-014e-1000-8461-700c000493e0'
AND primary_key_column NOT IN ('8dc81f6e-0156-1000-8291-700e000493e0')
)
LOOP
INSERT INTO schema.backup_table VALUES vl_bkp_rec;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
lv_err_msg := SUBSTR(SQLERRM, 1, 2999);
DBMS_OUTPUT.PUT_LINE('Handled - error while executing script. =>'|| lv_err_msg );
ROLLBACK;
END;
/
我低于错误
Handled - error while executing script. =>ORA-01400: cannot insert NULL into ("schema"."backup_table"."primary_key_column")
但 table1
和 backup_table
具有完全相同的结构。 (创建 backup_table
如下)
CREATE TABLE schema.backup_table AS
(SELECT * FROM schema.table1 WHERE rownum <1
);
上面使用的 和 select 查询获取有效数据。我在这里做错了什么?
您需要按以下方式使用您的变量。当前在您的代码中,声明为 table 类型的变量未被填充:请参阅下文如何使用它。
declare
vl_bkp_rec table1%ROWTYPE;
BEGIN
FOR cur_rec IN
(SELECT *
FROM table1
)
LOOP
vl_bkp_rec:=cur_rec; --Assign values of the cursor variable to your variable
INSERT INTO backup_table VALUES vl_bkp_rec;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
--lv_err_msg := SUBSTR(SQLERRM, 1, 2999); ---you need to decalre it befor using it
DBMS_OUTPUT.PUT_LINE('Handled - error while executing script. =>' );
ROLLBACK;
END;
/