ここでも、 2つの有名なシステムを相互に接続する必要がありましたが、現在はOracle DatabaseとSAPになります。 有料のバインディング方法もありますが、この場合は、データの小さなチャンクを使用する必要性について話します。
selectステートメントを使用してSAPから取得したデータを表示する方法について説明します。 基本的な可能性を示すために、例は非常に単純です。 SAP JCoまたは公開されているソースコードに基づいて作成されました。
SAP JCoは、支払人にのみ発行されます。 また、Oracle Databaseでは、バイナリ・ライブラリを使用したJavaコールを歓迎していません。したがって、デフォルトでは、この機能を特に有効にする必要があります。
Oracleデータベースのテーブルとその行に必要なタイプsap_table.tps:
drop type sap_rows; / drop type sap_row; / create or replace type sap_row as object(p1 varchar(30), p2 varchar(30), p3 varchar(30), p4 varchar(30), p5 varchar(30), dt varchar(20)) / create or replace type sap_rows as table of sap_row /
SAPからデータを取得し、select、art0int_sap.javaで使用する準備をするプロセスの主要コンポーネント:
package com.art0int; import java.util.*; import java.io.*; import java.math.*; import java.util.Calendar; import java.text.SimpleDateFormat; import java.sql.*; import oracle.sql.*; import oracle.jdbc.driver.OracleDriver; import java.util.HashMap; import java.util.Properties; import com.sap.conn.jco.AbapException; import com.sap.conn.jco.JCoContext; import com.sap.conn.jco.JCoDestination; import com.sap.conn.jco.JCoDestinationManager; import com.sap.conn.jco.JCoException; import com.sap.conn.jco.JCoField; import com.sap.conn.jco.JCoFunction; import com.sap.conn.jco.JCoFunctionTemplate; import com.sap.conn.jco.JCoStructure; import com.sap.conn.jco.JCoTable; import com.sap.conn.jco.ext.DataProviderException; import com.sap.conn.jco.ext.DestinationDataEventListener; import com.sap.conn.jco.ext.DestinationDataProvider; public class SAP_TABLE {
Oracleデータベースsap_table.jsにJavaソースをロードするためのラップ:
create or replace and compile java source named sap_table as @art0int_sap.java /
Oracleデータベース、SAP_TABLE.spcからのJava呼び出しのラッパー:
create or replace package SAP_TABLE is function get_java_property(prop in varchar2) return varchar2 is language java name 'java.lang.System.getProperty(java.lang.String) return java.lang.String'; function sap_rows_table(nrows in number) return sap_rows IS LANGUAGE JAVA name 'com.art0int.SAP_TABLE.SQL_sap_rows(java.math.BigDecimal) return oracle.sql.ARRAY'; end SAP_TABLE; /
そして、すべてをまとめる最終スクリプト。 sapjco3ライブラリーを呼び出す権利の発行に注意してください。
export ORACLE_SID=MYDB sqlplus '/ as sysdba' <<EOF drop user sapacc cascade; / create user sapacc identified by "psapacc" default tablespace users temporary tablespace temp profile monitor; grant connect,resource to sapacc; exec dbms_java.grant_permission('SAPACC', 'SYS:java.net.SocketPermission', 'MY_IP:MY_PORT', 'connect,resolve' ); exec dbms_java.grant_permission('SAPACC', 'SYS:java.io.FilePermission', '.', 'read' ); -- : Oracle Database, , , --select seq, kind, grantee, name, enabled from dba_java_policy where name like '%java.lang.RuntimePermission%'; --98 RESTRICT PUBLIC 0:java.lang.RuntimePermission
SAP Javaコネクタライブラリを対応するjava.library.pathディレクトリに配置すると、結果が表示されます。このディレクトリは、スクリプトが最初に呼び出されたときに表示されます。