衡量一個DBMS的功能是否強大,外部預存程序是否很方便建立和使用,是一個重要特徵。
ASA資料庫,很早就開始支援使用C, CLR(.NET)以及java等程式設計語言來建立預存程序。
下面介紹一個簡單的樣本,來建立一個基於Java 的ASA預存程序, 資料庫(ASA11.0或以上版本), 該樣本很簡單,輸入主機名稱,返回對應的IP地址,如果不能解析,返回"".
先編寫一個java類,大致內容如下:
import java.net.InetAddress;
import java.net.UnknownHostException;
public class SUPProcUtils
{
public static String getIPOfHost(String host)
{
String resolvedIP = "";
try
{
resolvedIP = InetAddress. getByName(host).getHostAddress();
}
catch (UnknownHostException e)
{
}
return resolvedIP;
}
public static void main(String[] args)
{
System. out.println(getIPOfHost( "www.bkjia.com"));
}
}
然後串連目標資料庫,執行下述SQL語句:
1. 指定jvm位置
alter external environment java location 'C:\\shared\\jdk1.6.0_31_x86\\bin\\java.exe'; // 這個主要是指定JVM的位置。
2. 安裝java class
install java new from file 'C:\\Users\\workspace\\test\\bin\\SUPProcUtils.class';
3. 建立預存程序(函數)
create function getIPOfHost(IN hostname CHAR(128)) returns VARCHAR(128)
external name 'SUPProcUtils.getIPOfHost(Ljava/lang/String;)Ljava/lang/String;'
language JAVA;
這裡邊主要要注意的是參數類型以及傳回值班類型,可以使用javap -c <class>得到原型說明。
4.樣本查詢:
select getIPOfHost('xxx.xxx.com');
返回:
100.172.102.173
總體來說,還是非常簡單的。
至於ASA的C預存程序的建立,步驟稍麻煩些,代碼寫起來也稍費時間些,但是C預存程序是最高效的,因為它的執行不需要單獨的JVM或者CLR運行時環境。