如何使用游标值作为字段名称使用?
现有一个存储过程,需求:从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' 写法不对,请教各位这句如何写,就是使用游标的值作为字段来使用,谢谢了!
解决方案 »
- ORACLE 实例的开机时自动启动
- 在Oracle中,如何将一张表中的long字段的数据插入到另一张表中的clob的字段中
- 有关 oracle安全(高手请进,小弟在这谢了!!!!长期有效,直到解决为止)
- 公司一道数据库笔试题?
- 各位,有什么好的第三方工具,可以吧oracle里面表结构自动生成表结构文档,最好还能生成表之间的关系图。
- 请教ORACLE存储过程执行完成sqlcode值为100是什么情况?是执行过程有错误吗?谢谢
- 求教:ORACLE的SESSION无法正常关闭(急)
- 在system底下建立一个表格出现“ora-00928:缺少select关键字”
- ~~~~~~问题紧急,请大家务必帮小弟一把!~~~~~~~~~~~在线等!
- oracle 数据段重复问题?
- oracle能运行为什么命令不能用啊
- 大型表行数据的存取,太慢了,怎么优化,,
id number
old number现在我想计算每个字段中值为25的记录数,然后把结果:字段名,总数写到表
temp_ke 中,temp_ke字段为
zdm varchar(10)
zdnum number
Execute 'insert into temp_ke (zdm,zdnum) values ('''|| feesum.CNAME ||''','|| num1 ||');'
这句没问题,有问题的是:
select count(*) into num1 FROM test1 where feesum.CNAME = '25' ;这句,这句用到了游标的值作为字段使用
Execute 'select count(*) into :num1 FROM test1 where '|| feesum.CNAME || '= ''25''' using num1;
具体语法还真忘了,你找找吧
(
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;
测试结果: