Oracle_PL-SQL_JavaSource_13

本文详细介绍了在Oracle数据库中如何创建和使用Java源代码,包括创建引用、调用函数,并探讨了如何查看存储在Oracle中的Java类。

JAVA Source

	有的时候,我们需要在Oracle的Prodedure、Function中调用JAVA代码来实现功能,比方说下面的这个例子,调用JAVA代码来实现大小写金额的转换,如果这个代码用PL实现,难度还是有的,那如果我们先写成JAVA代码,然后通过调用,来实现,还是可以的。

创建

--create or replace and compile java source named javasource_name
--as 
--package package_name
/*
* java code here
*/


CREATE or replace and compile java source named js_translater
AS
package com.yzupope.util;
/*
* 人民币大小写金额转化
*/
public class XhgUtil {


  private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分";


  private static final String DIGIT = "零壹贰叁肆伍陆柒捌玖";


  private static final double MAX_VALUE = 9999999999999.99D;


  public static String trans(double v) {
    if (v < 0 || v > MAX_VALUE)
      return "参数非法!";
    long l = Math.round(v * 100);//round(double a):返回最接近参数的long(返回值为static long)
    
    if (l == 0)
      return "零元整";
    String strValue = l + "";
    // j用来控制单位
    int j = UNIT.length() - strValue.length();
    String rs = "";
    boolean isZero = false;
    // i用来控制数
    for (int i = 0; i < strValue.length(); i++, j++) {
      char ch = strValue.charAt(i);
      if (ch == '0') {
        isZero = true;
        if (UNIT.charAt(j) == '亿' || UNIT.charAt(j) == '万'
            || UNIT.charAt(j) == '元') {
          rs = rs + UNIT.charAt(j);
          isZero = false;
        }
      } else {
        if (isZero) {
          rs = rs + "零";
          isZero = false;
        }
        rs = rs + DIGIT.charAt(ch - '0') + UNIT.charAt(j);
      }
    }
    if (!rs.endsWith("角") && !rs.endsWith("分")) {
      rs = rs + "整";
    }
    rs = rs.replaceAll("亿万", "亿");
    return rs;
  }
}

创建引用

CREATE OR REPLACE FUNCTION xchg(v NUMBER) RETURN VARCHAR2
AS
LANGUAGE JAVA NAME com.yzupope.util.XhgUtil.trans(double)return java.lang.String';

函数调用

select xchg(105.91) FROM dual;

Where are java classes stored in Oracle?(如何查看呢)

SELECT object_name, object_type, status, TIMESTAMP
FROM   user_objects
WHERE  (object_name NOT LIKE 'SYS_%' AND object_name NOT LIKE 'CREATE$%' AND
       object_name NOT LIKE 'JAVA$%' AND object_name NOT LIKE 'LOADLOB%')
       AND object_type LIKE 'JAVA %'
ORDER  BY object_type, object_name;
当然也可以通过工具查看


点击下载《大小写金额转化》《大小写金额转换IN Excel


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值