在 Oracle 中,不能直接使用 INSERT INTO B SELECT * FROM row 来循环插入一行数据。INSERT INTO 语句需要指定源表的名称,而不是单个行。\n\n如果要循环插入 A 表中的每一行到 B 表中,可以使用游标和循环结构来实现。以下是一个示例:\n\n\nDECLARE\n -- 声明游标\n CURSOR c1 IS\n SELECT * FROM A;\n \n -- 声明变量\n v_col1 A.col1%TYPE;\n v_col2 A.col2%TYPE;\n -- ... 声明其他需要的变量\n \nBEGIN\n -- 打开游标\n OPEN c1;\n \n -- 循环读取游标中的每一行\n LOOP\n -- 从游标中读取数据到变量\n FETCH c1 INTO v_col1, v_col2;\n \n -- 插入数据到 B 表\n INSERT INTO B (col1, col2)\n VALUES (v_col1, v_col2);\n \n -- ... 插入其他需要的数据\n \n -- 退出循环条件\n EXIT WHEN c1%NOTFOUND;\n END LOOP;\n \n -- 关闭游标\n CLOSE c1;\n \n -- 提交事务\n COMMIT;\n \n -- 输出插入完成的消息\n DBMS_OUTPUT.PUT_LINE('数据插入完成');\n \nEXCEPTION\n -- 异常处理\n WHEN OTHERS THEN\n -- 输出异常信息\n DBMS_OUTPUT.PUT_LINE('发生异常: ' || SQLERRM);\n -- 回滚事务\n ROLLBACK;\nEND; \n\n\n在上述示例中,首先通过游标 c1 选择 A 表中的所有行。然后使用循环结构将游标中的每一行数据读取到对应的变量中,并将其插入到 B 表中。循环继续直到游标中没有更多的行可读取。最后,提交事务以保存插入的数据,并输出插入完成的消息。如果发生异常,会进行相应的异常处理,包括输出异常信息和回滚事务。

Oracle A 表循环插入到 B 表:使用游标和循环结构

原文地址: https://www.cveoy.top/t/topic/p2MO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录