【Trafodion使用技巧篇】Trafodion 存儲過程SPJ

有人提供一個問題:Trafodion的存儲過程是用Java實現的,既然如此,爲什麼要創建存儲過程,爲何不直接寫業務代碼實現,而是創建複雜的Trafodion存儲過程,Trafodion存儲過程的優點在哪裏?不能否認,因爲Trafodion目前還不支持PL/SQL(Trafodion企業版EsgynDB支持PL/SQL),創建存儲過程確實相對有點麻煩,須要編寫Java類,編碼打包上並上傳到每一個Trafodion安裝的節點。但說到Trafodion存儲過程的優點(準確地說,是存儲過程的優點,存儲過程不是Trafodion特有的),這裏我就要來講道說道了。java

何爲存儲過程?下面是摘自百度百科的一段話:sql

存儲過程(Stored Procedure)是在大型數據庫系統中,一組爲了完成特定功能的SQL 語句集,存儲在數據庫中,通過第一次編譯後再次調用不須要再次編譯,用戶經過指定存儲過程的名字並給出參數(若是該存儲過程帶有參數)來執行它。存儲過程是數據庫中的一個重要對象。數據庫

存儲過程的優點?安全

1.模塊化設計:將多個複雜SQL語句封裝在一塊兒,一次建立,調用屢次,可減小開發人員工做量服務器

2.執行更快:存儲過程只在建立時編譯,之後每次執行都無需從新編譯,而通常SQL語句是執行一次編譯一次網絡

3.安全性高:能夠基於角色受權,指定某些用戶才能夠執行存儲過程模塊化

4.減小網絡傳輸:存儲過程是運行於服務器上,數據訪問都是在服務器上執行,減小了與客戶端進行大數據量的傳輸大數據

下面經過一個例子簡單介紹如何建立並使用Trafodion SPJ。主要步驟以下:編碼

1.編寫Java文件設計

import java.sql.*;
import java.math.*;
 
public class test
{
  public static void adjCredit(String name, String[] newCredit) throws SQLException {
 
     Connection conn = DriverManager.getConnection("jdbc:default:connection");
 
     PreparedStatement updateCredit = conn.prepareStatement("update trafodion.sales.customer " +
                                    "set credit = 'A2' " +
                                 "where custname = ?");
 
     PreparedStatement getCredit = conn.prepareStatement("select credit " +
                                "from trafodion.sales.customer " +
                                "where custname = ?");
 
     updateCredit.setString(1, name);
 
     updateCredit.executeUpdate();
 
     getCredit.setString(1, name);
 
     ResultSet rs = getCredit.executeQuery();
     rs.next();
 
     newCredit[0] = rs.getString(1);
 
     rs.close();
     conn.close();
  }
}

2.編譯1中的java文件生成class文件

[trafodion@cent-1 ~]$ javac test.java
[trafodion@cent-1 ~]$ ls -la test.*
-rw-rw-r--. 1 trafodion trafodion 1113 Oct  9 09:21 test.class
-rw-rw-r--. 1 trafodion trafodion  823 Oct  9 09:21 test.java

3.打包2中的class文件

[trafodion@cent-1 ~]$ jar cvf test.jar test.class
added manifest
adding: test.class(in = 1113) (out= 642)(deflated 42%)
[trafodion@cent-1 ~]$ ls -la test.*
-rw-rw-r--. 1 trafodion trafodion 1113 Oct  9 09:21 test.class
-rw-rw-r--. 1 trafodion trafodion 1095 Oct  9 09:21 test.jar
-rw-rw-r--. 1 trafodion trafodion  823 Oct  9 09:21 test.java

4.發佈3中的jar文件

  • 使用pdsh命令在每一個節點上建立相同的目錄
pdsh $MY_NODES -x $HOSTNAME mkdir $HOME/trafodion-spjs
  • 使用pdcp把前面生成的jar複製到每一個節點的相同目錄下
pdcp $MY_NODES test.jar  trafodion-spjs/
  • 建立library指向上述jar路徑
SQL>create library trafodion.sales.sales file '/home/trafodion/trafodion-spjs/test.jar';
 
--- SQL operation complete.
 
SQL>get libraries;
 
--- SQL operation complete.
 
SQL>get libraries in schema trafodion.sales;
 
SALES
 
--- SQL operation complete.

5.建立SPJ

SQL>create procedure trafodion.sales.adjCredit(in name varchar(10),out credit varchar(10))
+>external name 'test.adjCredit'
+>library trafodion.sales.sales
+>language java
+>parameter style java;
 
--- SQL operation complete.
 
SQL>get procedures;
 
Procedures in Schema TRAFODION.SALES
====================================
 
ADJCREDIT

6.執行SPJ

SQL>call adjcredit('A',?);
....
 
CREDIT
----------
A2
 
--- SQL operation complete.
相關文章
相關標籤/搜索