將sql語句包含在select (.....) from dual中,就可以了。
邏輯說明:
單據表體的幣制+表頭開立日期 關聯 匯率維護(原始貨幣代碼、生效日期範圍),擷取轉換率,
然後轉換金額至美元後再進行匯總,得到 發票金額(USD) ;若關聯不到匯率,則預設以1:1的匯率進行匯總。
擷取指定日期最近的資料sql:
MS SQL SERVER,select * from table_namewhere abs(column_name-convert(datetime,'20081220',112)) in (select min(abs(column_name-convert(datetime,'20081220',112))) from table_name)ORACLEselect * from table_namewhere abs(column_name-to_date('20081220','yyyymmdd')) in (select min(abs(column_name-to_date('20081220','yyyymmdd'))) from table_name)
oracle中的預存程序:
CREATE OR REPLACE PROCEDURE COST_BILL_INSURE_TOTAL_CALC/************************************************************************* *************************進出保險統計表************************************ *************************AUTHOR:XIN***************************************/(V_EMS_NO VARCHAR2, V_I_E_MARK VARCHAR2, V_INPUTER VARCHAR2, V_REMARK OUT VARCHAR2) ASBEGIN -- DELETE FROM AIPTEK_COST_BILL_INSURE_TOTAL T WHERE T.EMS_NO = V_EMS_NO AND T.I_E_MARK = V_I_E_MARK; -- INSERT INTO AIPTEK_COST_BILL_INSURE_TOTAL (I_E_MARK, BILL_NO, INVOIC_NO, G_NAME, G_QTY, G_TOTAL, INSURE_G_TOTAL, INSURE_RATE, INSURE_COST, TRAF_MODE, TO_FROM_ADD, TRADE_MODE, CUS_CODE, CREATE_DATE, START_ADD, TRAF_TOOLS, EMS_NO, INPUT_ER) SELECT V_I_E_MARK, M.BILL_NO, M.INVOIC_NO, MAX(M.G_NAME), M.TOTAL_QTY, SUM(M.G_TOTAL * NVL(I.TAX, 1)) USD, SUM(M.G_TOTAL * NVL(I.TAX, 1)) * 1.1, 0.00015, SUM(M.G_TOTAL * NVL(I.TAX, 1)) * 1.1 * 0.00015, M.TRAF_MODE, M.TO_FROM_ADD, --目的地 M.TRADE_MODE, --貿易方式 M.CUS_CODE, --報關行 M.CREATE_DATE, --開立日期 '吳江', '', V_EMS_NO, V_INPUTER FROM AIPTEK_VIEW_BILL_MANAGE M LEFT JOIN (SELECT T.ORG_CURR, T.EFF_DATE, T.TAX FROM INFO_CORP_TAX T) I ON I.EFF_DATE IN (SELECT M.CREATE_DATE - (select min(abs(EFF_DATE - M.CREATE_DATE)) from INFO_CORP_TAX) FROM DUAL) AND M.G_CURR = I.ORG_CURR WHERE M.EMS_NO = V_EMS_NO AND M.I_E_MARK = V_I_E_MARK AND M.Trade_Mode = '0615' AND M.ID IS NOT NULL GROUP BY M.OID, M.BILL_NO, M.INVOIC_NO, M.TOTAL_QTY, M.TRAF_MODE, M.TO_FROM_ADD, --目的地 M.TRADE_MODE, --貿易方式 M.CUS_CODE, --報關行 M.CREATE_DATE; --開立日期 COMMIT;EXCEPTION WHEN OTHERS THEN V_REMARK := SQLCODE || SUBSTR(SQLERRM, 1, 200) || 'ERROR:執行預存程序COST_BILL_INSURE_TOTAL_CALC時出錯'; ROLLBACK;END COST_BILL_INSURE_TOTAL_CALC;