2010-09-28 71 views
0

任何人都可以建議我如何使用ole2從oracle形式執行excel函數(例如PMT()),並得到結果?從oracle形式調用excel函數

+0

您正在使用哪個版本的Forms?這種集成在舊版客戶端/服務器實現(4.5 - 6.5)中非常簡單,但在Web交付版本中更加棘手。 – APC 2010-09-29 03:30:19

+0

我正在使用ORacle Forms 6 – D0cNet 2010-09-30 00:53:51

回答

0

我只是在PL/SQL中重新創建了PMT函數,這是表單的本地語言。例如。基於http://forums.contractoruk.com/technical/28716-calculate-apr-loan-repayment-using-pl-sql-java.html

CREATE 
FUNCTION pmt (rate  IN NUMBER /* Rate (APR) */ 
      ,amt  IN NUMBER /* Loan amount */ 
      ,payments IN NUMBER /* number of payments */ 
      ) RETURN NUMBER IS /* periodic payment amount */ 
BEGIN 
    RETURN (rate/12*amt*power((1+rate/12),payments))/(power((1+rate/12),payments)-1); 
END pmt; 

例如,

BEGIN 
    DBMS_OUTPUT.put_line(
    'PMT = $' || TRUNC(pmt(0.249, 5000, 11), 2) 
); 
END; 
/

PMT = $513.07 
0

我創建了PL/SQL函數,它將根據MS Excel中的公式計算PMT函數。

這第一個功能不會影響未來的價值,第二個功能不會影響未來的價值。

/* No future value factor */ 
FUNCTION pmt (APR  IN NUMBER /* Rate (APR) */, 
        pv  IN NUMBER /* Loan amount */, 
        nper IN NUMBER /* number of payments */ 
       ) RETURN NUMBER IS /* periodic payment amount */ 
BEGIN 
    RETURN (APR/(1 - power((1 + APR),-nper)) * pv); 

END pmt;  

/* With future value factor */ 
FUNCTION pmt (APR IN NUMBER, /* Rate (APR) */ 
       nper IN NUMBER, /* Number of payments */ 
       pv  IN NUMBER, /* present value */ 
       fv  IN NUMBER /*future value */ 
      ) RETURN NUMBER IS /* periodic payment amount */ 

    calcpmt NUMBER := 0; 
    powercalc NUMBER:=0; 
BEGIN 

powercalc:= POWER(1+APR, nper); 
RETURN APR/(powercalc - 1) * -(pv * powercalc + fv); 

END;