如何使用游标值作为字段名称使用?
现有一个存储过程,需求:从test1中取所有表字段,然后再计算每个字段=25的总记录数,把结果写入表:create or replace procedure pro_2k1w_zd is
num1 number(10);cursor sum_fee1 is
select cname from col where lower(tname)='test1';
begin
delete from temp_ke;
for feesum in sum_fee1
loop
num1 :=1;
select count(*) into num1 FROM test1 where feesum.CNAME = '25' ;
insert into temp_ke (zdm,zdnum) values (feesum.CNAME,num1);
end loop;
end pro_2k1w_zd; 目前问题是:select count(*) into num1 FROM test1 where feesum.CNAME = '25' ; 这句没执行,应该是其中的
feesum.CNAME = '25' 写法不对,请教各位这句如何写,就是使用游标的值作为字段来使用,谢谢了!
现有一个存储过程,需求:从test1中取所有表字段,然后再计算每个字段=25的总记录数,把结果写入表:create or replace procedure pro_2k1w_zd is
num1 number(10);cursor sum_fee1 is
select cname from col where lower(tname)='test1';
begin
delete from temp_ke;
for feesum in sum_fee1
loop
num1 :=1;
select count(*) into num1 FROM test1 where feesum.CNAME = '25' ;
insert into temp_ke (zdm,zdnum) values (feesum.CNAME,num1);
end loop;
end pro_2k1w_zd; 目前问题是:select count(*) into num1 FROM test1 where feesum.CNAME = '25' ; 这句没执行,应该是其中的
feesum.CNAME = '25' 写法不对,请教各位这句如何写,就是使用游标的值作为字段来使用,谢谢了!
解决方案 »
- 无效字符
- oracledbconsole无法启动
- Oracle中多用户操作表很慢!!!
- Oracle 安装问题!
- 64位系统的pl/sql无法链接数据库,跪求64位的客户端工具
- 用.NET开发web程序,发布网站后提示“验证适配器初始化失败”
- Oracle网站上提供下载的Oracle数据户服务器软件是否有使用限制
- varchar2 的字段为空在查询的时候应该怎么写条件?
- 我现在想卸载ORACLE8.0.5 FOR WIN2000安装ORACLE9I,请问如何卸载ORACLE8.0.5?
- oracle 11g dump file 导入 oracle 12c 后 表或者视图不存在
- _allow_resetlogs_corruption=false 居然也能恢复成功,有问题。
- 删除空表
id number
old number现在我想计算每个字段中值为25的记录数,然后把结果:字段名,总数写到表
temp_ke 中,字段为
zdm varchar(10)
zdnum number
(
ID NUMBER(4),
older NUMBER(4)
);INSERT INTO Test1 VALUES(1, 23);
INSERT INTO Test1 VALUES(25, 4);
INSERT INTO Test1 VALUES(2, 25);
INSERT INTO Test1 VALUES(25, 1);
INSERT INTO Test1 VALUES(3, 25);
INSERT INTO Test1 VALUES(4, 23);
INSERT INTO Test1 VALUES(5, 25);CREATE TABLE temp_ke
(
zdm VARCHAR(10),
adnum NUMBER(4)
)
存储过程:CREATE OR REPLACE PROCEDURE ProcedureTest1 IS
-- 定义光标,从user_tab_columns数据字典中检索列名
CURSOR c1 IS SELECT column_name FROM user_tab_columns WHERE table_name = 'TEST1';
-- 保存列名
vColumnName VARCHAR2(20);
-- 保存记录个数
vNum NUMBER(4);
vSQL VARCHAR2(200);
BEGIN
FOR r IN c1
LOOP
vColumnName := r.column_name;
vSQL := 'SELECT COUNT(1) FROM Test1 WHERE ' || vColumnName || '=25';
EXECUTE IMMEDIATE 'SELECT COUNT(1) FROM Test1 WHERE ' || vColumnName || '=25'
INTO vNum;
EXECUTE IMMEDIATE 'INSERT INTO temp_ke VALUES(:1, :2)'
USING vColumnName, vNum;
END LOOP;
COMMIT;
END ProcedureTest1;
测试结果: