谁有办法实现我的这个目的 你的公式表里存的是字符串,得写一个解析程序来解释这个字符串为公式,恐怕单单用sql是解决不了的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我通过decode进行处理问题基本解决 用decode能解决固定代码的处理,但是你的问题不是这样,如果公式表中新增了纪录或者修改了纪录,你是不是还要修改decode?如果是这样,那设定一个公式表还有什么意义?不如直接把逻辑写入代码中 --获取公式 open c_RefSalFormula(pRefProj_id,1); -- 设置构造 sql 的辅助部分 v_SumPart := ' sum(decode(''SAL'' || SAL_ID || ''[PROJ'' || PROJ_ID || '']'',''SAL'; v_FromPart := ' from T_PAYOFF '; v_WhereDatePart := ' where PAYOFF_DATE between to_date(''' || to_char(calStartDate) || ''') and to_date(''' || to_char(calEndDate) || ''')' ; v_GroupPart := ' group by PERS_ID '; --构造sql Loop fetch c_RefSalFormula into v_SalFormula; exit when c_RefSalFormula%NOTFOUND; v_sFormula := v_SalFormula.REFFORMULA; --构造select 部分 v_SelectPart := 'select ' || v_SalFormula.REFPROJ_ID || ' REFPROJ_ID,' || v_SalFormula.SAL_ID || ' SAL_ID, PERS_ID, ' ; -- 根据公式处理 If Length(v_sFormula) > 0 Then dbms_output.put_line(v_test); v_sFormula := Replace(v_sFormula, ']', ']]'); v_sFormula := Replace(v_sFormula, 'SAL', v_SumPart); v_sFormula := Replace(v_sFormula, ']]', ']'',SAL))' ); v_Formula := v_SelectPart || v_sFormula || v_FromPart || v_WhereDatePart || v_GroupPart; -- 组合 If Length(Trim(v_sSql)) > 0 Then v_sSql := v_sSql || ' union ( ' || v_Formula || ' )'; Else v_sSql := ' ( ' || v_Formula || ' )'; end if; dbms_output.put_line('union.............'); end if; end loop; If Length(Trim(v_sSql)) > 0 Then open SalCursor for v_sSql; end if; close c_RefSalFormula; powerdesignerBPM/EAM怎么关联CDM/PDM 帮忙指点 这个触发器问题在哪里啊 谢谢 关于show profiles (MY SQL) 如何得到某一条记录非空值的列名然后再用来查找其他记录对应列的数据? 各位高手帮忙看下 这出来什么问题,我看了N遍都没有找出来 把sqlserver 存储过程转换为oracle存储过程 新手问oracle问题!能帮忙的帮帮我!!! 关于Oracle启动 在ORACLE816中,插入VARCHAR2类型数据的怪问题... SQL语句的拼接问题 困扰。。这个问题,要怎么解决?? 问:关于一个引用对象以及对象类型表的插入、更新问题!!!
问题基本解决
open c_RefSalFormula(pRefProj_id,1);
-- 设置构造 sql 的辅助部分
v_SumPart := ' sum(decode(''SAL'' || SAL_ID || ''[PROJ'' || PROJ_ID || '']'',''SAL';
v_FromPart := ' from T_PAYOFF ';
v_WhereDatePart := ' where PAYOFF_DATE between to_date(''' || to_char(calStartDate) || ''') and to_date(''' || to_char(calEndDate) || ''')' ;
v_GroupPart := ' group by PERS_ID ';
--构造sql
Loop
fetch c_RefSalFormula into v_SalFormula;
exit when c_RefSalFormula%NOTFOUND; v_sFormula := v_SalFormula.REFFORMULA;
--构造select 部分
v_SelectPart := 'select ' || v_SalFormula.REFPROJ_ID || ' REFPROJ_ID,'
|| v_SalFormula.SAL_ID || ' SAL_ID, PERS_ID, ' ; -- 根据公式处理
If Length(v_sFormula) > 0 Then
dbms_output.put_line(v_test);
v_sFormula := Replace(v_sFormula, ']', ']]');
v_sFormula := Replace(v_sFormula, 'SAL', v_SumPart);
v_sFormula := Replace(v_sFormula, ']]', ']'',SAL))' ); v_Formula := v_SelectPart || v_sFormula || v_FromPart || v_WhereDatePart || v_GroupPart;
-- 组合
If Length(Trim(v_sSql)) > 0 Then
v_sSql := v_sSql || ' union ( ' || v_Formula || ' )';
Else
v_sSql := ' ( ' || v_Formula || ' )';
end if;
dbms_output.put_line('union.............');
end if;
end loop;
If Length(Trim(v_sSql)) > 0 Then
open SalCursor for v_sSql;
end if; close c_RefSalFormula;