日期:2014-05-17  浏览次数:20744 次

电信项目的一个存储过程sql语句,求大神指导。。。。。。。。。。。。。。。。
现有一个表tb_compare_script,其中一个字段存储的是一条sql查询语句,这条sql语句从rim_account_2012,bims_account_2012两个表中查询数据。比如:1. select count(1) from rim_account_2012 where city='崇左'
  2. SELECT b.* FROM bims_account_2012 b WHERE NOT EXISTS (SELECT 1 FROM rim_account_2012 a WHERE upper(a.account)=upper(b.account) and a.city=b.city) and b.city='崇左'

这样,有的是统计,有的是查询详细的数据。 现在要写一个存储过程,从tb_compare_script表中查询出sql语句,执行,从结果中取得数据,插入tb_compare 和tb_output 数据表中。tb_compare 表存储的是统计数据,而tb_oupt表则要存储统计和详细数据。

现在我不懂的地方是:从tb_compare_script中查询出来的sql语句怎么在存储过程中执行,再取得数据,进而把数据插入tb_compare表 和tb_output表中。还有要怎么分辨哪条数据该存在哪个表中呢,不知道我描述清楚了没有?希望大神指教,刚毕业,压力很大啊!

------解决方案--------------------
SQL code

--帮你写了个例子,只是不知道你的字符串的SELECT b.* FROM bims_account_2012 b WHERE NOT EXISTS (SELECT 1 FROM rim_account_2012 a WHERE upper(a.account)=upper(b.account) and a.city=b.city) and b.city='崇左',如何进行更新或新增到你的表,其实都差不多的,不懂再问吧

create table t(
id int,
val varchar2(2000)
);

create table t1(
id int,
empcou int,
empdescr varchar2(2000)
);

insert into t values(1,'select count(1) from emp');

insert into t1 values(1,0,'');

declare 
    strsql varchar2(2000);
    cou varchar2(20);
    cursor c is select * from t;
begin
    for i in c
    loop 
        if instr(i.val,'count')>1 then
            execute immediate i.val
                into cou;
            update t1 set empcou=cou where t1.id=1;
        else
            dbms_output.put_line('对于字符串你打算如何统计呢?');
        end if;
    end loop;
end;
/

select * from t1;

------解决方案--------------------
只是例子而已呀,去拼接字符串不就可以了,而且上面也没关联值呀,肯定不能这样写的