CREATE OR REPLACE PROCEDURE p1(records_number IN NUMBER) IS BEGIN FOR i IN 1..records_number LOOP INSERT INTO CI_CIPH_HIGH_PTY_ADDR_RELA (ECIF_CUST_NO, PTY_ADDR_RELA_TYP, ADDR_ID) VALUES ( 'CUST_NO_' || LPAD(i, 10, '0'), CASE MOD(i,3) WHEN 0 THEN 'HOME' WHEN 1 THEN 'OFFICE' ELSE 'OTHER' END, 'ADDRESS_' || LPAD(i, 10, '0') ); IF MOD(i, 1000) = 0 THEN COMMIT; END IF; END LOOP; COMMIT; END;这个存储过程运行出错,帮我纠正
时间: 2024-02-14 08:17:57 浏览: 52
根据您提供的代码,存储过程出错的原因可能是因为在循环插入数据时,没有先清空表中原有的数据。因此,您可以在循环之前添加一个删除表中数据的语句,如下所示:
```
CREATE OR REPLACE PROCEDURE p1(records_number IN NUMBER) IS
BEGIN
DELETE FROM CI_CIPH_HIGH_PTY_ADDR_RELA; -- 先清空表中原有数据
FOR i IN 1..records_number LOOP
INSERT INTO CI_CIPH_HIGH_PTY_ADDR_RELA (ECIF_CUST_NO, PTY_ADDR_RELA_TYP, ADDR_ID)
VALUES (
'CUST_NO_' || LPAD(i, 10, '0'),
CASE MOD(i,3)
WHEN 0 THEN 'HOME'
WHEN 1 THEN 'OFFICE'
ELSE 'OTHER'
END,
'ADDRESS_' || LPAD(i, 10, '0')
);
IF MOD(i, 1000) = 0 THEN
COMMIT;
END IF;
END LOOP;
COMMIT;
END;
```
此外,您还需要注意以下几点:
1. 表名、列名是否正确,大小写是否匹配;
2. 存储过程中的参数是否正确传递;
3. 数据库用户是否拥有写入表的权限。
阅读全文