如何在Oracle的SELECT语句WHERE条件中传递FOR循环变量?
PL/SQL代码错误修正方案
先看你代码里的几个核心问题:
- WHERE子句里误用了赋值运算符
:=,SQL条件判断要使用比较运算符=;而且循环变量i是游标返回的记录,要访问它的USER_NAME字段,得写成i.USER_NAME - 变量
person_status未提前声明,PL/SQL中所有用到的变量必须在declare块里定义 - INSERT语句语法错误,正确格式是
INSERT INTO 表名(列名) VALUES(值),你把语句顺序搞反了 - 循环内频繁执行COMMIT会影响性能,建议把COMMIT移到循环外部统一提交
修正后的代码如下:
declare cursor abc is select USER_NAME from dba_users; -- 声明变量,类型匹配dba_users.status字段的类型 person_status dba_users.status%type; begin for i in abc loop select status into person_status from dba_users where USER_NAME = i.USER_NAME; -- 修正比较运算符和变量引用方式 -- 修正INSERT语法,这里假设table_1中存储status的列名为status_col,请根据实际表结构调整 insert into table_1 (status_col) values (person_status); end loop; commit; -- 统一提交事务 end; /
另外,这段代码可以进一步优化成单条INSERT语句,不需要游标循环,执行效率会更高:
insert into table_1 (status_col) select status from dba_users; commit;
内容的提问来源于stack exchange,提问作者meg
相关产品推荐
相关产品推荐

