Oracle PL/SQL游标问题:如何用SELECT * FROM Towns实现数据插入
解决方案
当你在游标中使用SELECT * FROM Towns时,游标返回的是整个Towns表的行数据,而你原来定义的变量z_towns是towns.place%TYPE,只能存储单个列的值,类型不匹配导致报错。要实现需求,需要做以下修改:
- 把变量类型改为
towns%ROWTYPE,这样可以存储整行数据 - 游标定义改为
SELECT * FROM towns - 插入时提取行变量中的
place列值
修改后的代码如下:
DECLARE z_towns towns%ROWTYPE; -- 改为行类型变量,存储整行数据 CURSOR abc IS SELECT * FROM towns; -- 使用SELECT * BEGIN OPEN abc; LOOP FETCH abc INTO z_towns; -- 把整行数据存入变量 EXIT WHEN abc%NOTFOUND; INSERT INTO F (b) VALUES(z_towns.place); -- 提取行变量中的place列 END LOOP; CLOSE abc; END;
另外,也可以用更简洁的游标FOR循环写法,不需要手动打开、关闭游标:
BEGIN FOR z_towns IN (SELECT * FROM towns) LOOP INSERT INTO F (b) VALUES(z_towns.place); END LOOP; END;
这种写法PL/SQL会自动处理游标的生命周期,代码更简洁易维护。
内容的提问来源于stack exchange,提问作者Neha08
相关产品推荐
相关产品推荐

