谁有办法实现我的这个目的 你的公式表里存的是字符串,得写一个解析程序来解释这个字符串为公式,恐怕单单用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; 存储过程中with as的应用 oracle10.2.0通过透明网关10.2连接sqlserver2005问题,死活不通,高手请拔刀相助!!! 请问如果一旦发生停电,redo log是如何操作去恢复的? sql 查询语句 100分 这个存储过程有什么问题? d2k升级form6i问题 如何通过like模糊查询符合传递过来变量的记录(在线等) 软件创意, 功能是否可以得到保护 两种统计方式哪个更快? PLSQL导出sql file 日期格式反了 困扰。。这个问题,要怎么解决?? 问:关于一个引用对象以及对象类型表的插入、更新问题!!!
问题基本解决
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;