ORACLE中联接是在on后面出现外部子联接的错误,获取指定日期最近的数据sql
2012-11-06 16:01
429 查看
将sql语句包含在select (.....) from dual中,就可以了。
逻辑说明:
单据表体的币制+表头开立日期 关联 汇率维护(原始货币代码、生效日期范围),获取转换率,
然后转换金额至美元后再进行汇总,得到 發票金額(USD) ;若关联不到汇率,则默认以1:1的汇率进行汇总。
获取指定日期最近的数据sql:
oracle中的存储过程:
逻辑说明:
单据表体的币制+表头开立日期 关联 汇率维护(原始货币代码、生效日期范围),获取转换率,
然后转换金额至美元后再进行汇总,得到 發票金額(USD) ;若关联不到汇率,则默认以1:1的汇率进行汇总。
获取指定日期最近的数据sql:
MS SQL SERVER, select * from table_name where abs(column_name-convert(datetime,'20081220',112)) in ( select min(abs(column_name-convert(datetime,'20081220',112))) from table_name) ORACLE select * from table_name where 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) AS BEGIN -- 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;
相关文章推荐
- C# 用SqlBulkCopy 批量插入oracle数据 遇到了 ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效
- 查询离指定日期最近的一条数据(oracle)
- java解析oracle日志,获取指定日期后的更新和插入数据
- 获取系统当前日期的指定多少天的数据sql
- oracle中从指定日期中获取月份或者部分数据
- Oracle中使用游标获取指定数据表的所有字段名对应的字符串
- 按指定排列顺序获取数据的sql语句
- Oracle 获取上周一到周末日期的查询sql语句
- 表单中空数据插入指定数据,日期格式转换,sql
- 在Oracle使用sql语句中如何插入日期格式的数据
- sql 脚本 昨天的日期获取,今天的前一天的数据获取, 前两个月的今天
- 把Oracle的数据导到另一个数据库中,用SQL 2008做ssis,发生错误ORA-01653
- Oracle:ORA-01810:格式代码出现两次 日期格式、时间格式、to_date错误
- 按指定排列顺序获取数据的sql语句
- Oracle 12c及oracle sql developer登陆scott时都出现ORA-01017错误的解决方法
- c# oracle 向表中添加数据 报错:invalid character 。原因是在sql后面加了分号
- 使用Oracle SQL Developer提示无法从套接字获取更多数据如何解决
- 在PL/SQL中连接ORACLE时,出现:ora-12154:无法解析指定的服务名
- Oracle SQL获取简单的数据表目录信息,列信息
- 向ACCESS中的"时间/日期"字段中插入DateTime.Now时出现“标准表达式中数据类型不匹配。”错误的解决办法