用动态语句就可以了
给你我自己写的一个函数做一下参考吧
CREATE OR REPLACE Function PRODDTA.F_getGlobeQty(PRP9 CHAR,SRP3 CHAR,UPRC NUMBER,Math05 Number)
Return Number
Authid Current_User
As
/* 作者:699964
功能:取新款下单初始量
日期:2008-02-20
*/
MATH_UP Number;
MATH_DOWN Number;
v_sql1 Varchar(1000);
v_sql2 Varchar(1000);
v_name1 Varchar(10);
v_name2 Varchar(10);
v_name3 Varchar(10);
v_name4 Varchar(10);
qty_up Number;
qty_down Number;
V_PQA1 Number;
V_PQA2 Number;
GLOBE_QTY Number;
Begin
MATH_UP := ceil(Math05);
MATH_DOWN := trunc(Math05);
v_name1 := 'PESQ0'||TO_CHAR(5 - MATH_UP);
v_name2 := 'PESQ0'||TO_CHAR(5 - MATH_DOWN);
v_name3 := 'PEPQA'||TO_CHAR(5 - MATH_UP);
V_NAME4 := 'PEPQA'||TO_CHAR(5 - MATH_DOWN);
v_sql1 := 'select '||V_NAME1||','||V_NAME2||' FROM proddta.F660045F where PESRP3 = '||SRP3||' and peminprice <='||uprc||' and pemaxprice >'||uprc;
Execute Immediate v_sql1 Into qty_up,QTY_DOWN;
V_SQL2 := 'SELECT '||V_NAME3||','||V_NAME4||' FROM proddta.F660048d where peprp9 = '||prp9||' and peminprice <='||uprc||' and pemaxprice >'||uprc;
--dbms_output.put_line(v_sql);
Execute Immediate v_sql2 Into V_PQA1,V_PQA2;
GLOBE_QTY := ROUND(((nvl(qty_up,0)/10000)*(V_PQA1) - (nvl(QTY_DOWN,0)/10000)*(V_PQA2))*(MATH05 - MATH_down) + (nvl(QTY_DOWN,0)/10000)*(V_PQA2))*10000;
--dbms_output.put_line(TO_CHAR(QTY_UP)||','||TO_CHAR(V_PQA1)||','||TO_CHAR(QTY_DOWN)||','||TO_CHAR(V_PQA2)||','||TO_CHAR(MATH05)||','||TO_CHAR(MATH_DOWN));
Return GLOBE_QTY;
Exception
When Others Then
Return 0;
End;