Oracle_PL-SQL_JavaSource_13

来源:互联网 发布:家庭网络布线交换机 编辑:程序博客网 时间:2024/06/06 02:28


JAVA Source

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

创建

[sql] view plaincopy
  1. --create or replace and compile java source named javasource_name  
  2. --as   
  3. --package package_name  
  4. /*  
  5. * java code here  
  6. */  
  7.   
  8.   
  9. CREATE or replace and compile java source named js_translater  
  10. AS  
  11. package com.yzupope.util;  
  12. /*  
  13. * 人民币大小写金额转化  
  14. */  
  15. public class XhgUtil {  
  16.   
  17.   
  18.   private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分";  
  19.   
  20.   
  21.   private static final String DIGIT = "零壹贰叁肆伍陆柒捌玖";  
  22.   
  23.   
  24.   private static final double MAX_VALUE = 9999999999999.99D;  
  25.   
  26.   
  27.   public static String trans(double v) {  
  28.     if (v < 0 || v > MAX_VALUE)  
  29.       return "参数非法!";  
  30.     long l = Math.round(v * 100);//round(double a):返回最接近参数的long(返回值为static long)  
  31.       
  32.     if (l == 0)  
  33.       return "零元整";  
  34.     String strValue = l + "";  
  35.     // j用来控制单位  
  36.     int j = UNIT.length() - strValue.length();  
  37.     String rs = "";  
  38.     boolean isZero = false;  
  39.     // i用来控制数  
  40.     for (int i = 0; i < strValue.length(); i++, j++) {  
  41.       char ch = strValue.charAt(i);  
  42.       if (ch == '0') {  
  43.         isZero = true;  
  44.         if (UNIT.charAt(j) == '亿' || UNIT.charAt(j) == '万'  
  45.             || UNIT.charAt(j) == '元') {  
  46.           rs = rs + UNIT.charAt(j);  
  47.           isZero = false;  
  48.         }  
  49.       } else {  
  50.         if (isZero) {  
  51.           rs = rs + "零";  
  52.           isZero = false;  
  53.         }  
  54.         rs = rs + DIGIT.charAt(ch - '0') + UNIT.charAt(j);  
  55.       }  
  56.     }  
  57.     if (!rs.endsWith("角") && !rs.endsWith("分")) {  
  58.       rs = rs + "整";  
  59.     }  
  60.     rs = rs.replaceAll("亿万""亿");  
  61.     return rs;  
  62.   }  
  63. }  

创建引用

[sql] view plaincopy
  1. CREATE OR REPLACE FUNCTION xchg(v NUMBER) RETURN VARCHAR2  
  2. AS  
  3. LANGUAGE JAVA NAME com.yzupope.util.XhgUtil.trans(double)return java.lang.String';  

函数调用

[sql] view plaincopy
  1. select xchg(105.91) FROM dual;  

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

[sql] view plaincopy
  1. SELECT object_name, object_type, status, TIMESTAMP  
  2. FROM   user_objects  
  3. WHERE  (object_name NOT LIKE 'SYS_%' AND object_name NOT LIKE 'CREATE$%' AND  
  4.        object_name NOT LIKE 'JAVA$%' AND object_name NOT LIKE 'LOADLOB%')  
  5.        AND object_type LIKE 'JAVA %'  
  6. ORDER  BY object_type, object_name;  
当然也可以通过工具查看

转自:http://blog.csdn.net/yzupope/article/details/7945308

0 0
原创粉丝点击