Download Cервер Oracle

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Cервер Oracle
Некоторые возможности интеграции
Сервер Oracle – некоторые возможности
интеграции

Работа с COM-объектами на сервере




Работа с функциями ОС сервера



Формирование документа MS-Excel
Формирование PDF документа
Как без COM?
Принципиальная схема работы
Пример выполнения команды ОС
Отправка e-mail (SMTP) с вложением
Работа с COM-объектами на сервере

Установка Oracle COM Automation Feature




Схема работы
Установка математического обеспечения
Конфигурирование служб Oracle Net
Настройка серверной части

Установка надстроек для работы с COM-серверами
MS Word, MS Excel, MS Power Point, MAPI

Документация
Работа с COM-объектами на сервере – Схема
работы
Экземпляр БД
Oracle Listener
Хранимые
PL/SQL
объекты
Oracle Net RPC
Обработчик
RPC
Oracle
COM Feature
Данные БД
Внешние COM
серверы
Область процессов экземпляра БД Oracle
COM/DCOM
Внешние проецессы
СЕРВЕР
Работа с COM-объектами на сервере –
Установка математического обеспечения
Работа с COM-объектами на сервере –
Конфигурирование служб Oracle Net
LISTENER.ORA
LISTENER =
(ADDRESS_LIST=
…
(ADDRESS = (PROTOCOL = IPC) (KEY = EXTPROC0) )
…
)
TNSNAMES.ORA
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC) (KEY = EXTPROC0))
(CONNECT_DATA = (SID = plsextproc)))
)
Работа с COM-объектами на сервере –
Настройка серверной части
Компиляция объектов Oracale COM Automation Feature
SQL> CONNECT PARUS/PARUSINA@DATABASE
SQL> @<ORACLE_HOME>\COM\COMWRAP.SQL
Работа с COM-объектами на сервере – Установка
надстроек для работы с COM-серверами MS Word, MS
Excel, MS Power Point, MAPI
Компиляция объектов надстроек для Excel, Word, PowerPoint, MAPI
SQL> CONNECT PARUS/PARUSINA@DATABASE
SQL> @<ORACLE_HOME>\COM\DEMOS\EXCELSOL.SQL
SQL> @<ORACLE_HOME>\COM\DEMOS\WORDSOL.SQL
SQL> @<ORACLE_HOME>\COM\DEMOS\PPTDSOL.SQL
SQL> @<ORACLE_HOME>\COM\DEMOS\MAPISOL.SQL
Работа с COM-объектами на сервере Документация

Oracle COM Automation Feature Developer's Guide


http://docs.oracle.com/cd/B19306_01/win.102/b14310/toc.htm
Oracle COM Automation PL/SQL Demos

http://docs.oracle.com/cd/B19306_01/win.102/b14310/ch4plsql.htm
Работа с COM-объектами на сервере –
Формирование документа MS-Excel
declare
N binary_integer := 2;
I binary_integer;
FILENAME varchar2(255);
CELLINDEX varchar2(40);
CELLCOLUMN varchar2(40);
begin
FILENAME := 'd:\excel';
I := ORDEXCEL.CREATEEXCELWORKSHEET('');
I := ORDEXCEL.INSERTDATA('A1', 'Номер', 'BSTR');
I := ORDEXCEL.INSERTDATA('B1', 'Мнемокод', 'BSTR');
I := ORDEXCEL.INSERTDATA('C1', 'Наименование', 'BSTR');
I := ORDEXCEL.INSERTDATA('D1', 'Сумма', 'BSTR');
for C1_REC in (select AG.AGNABBR, AG.AGNNAME from AGNLIST AG
where ROWNUM <= 10)
loop
CELLCOLUMN := TO_CHAR(N);
CELLINDEX := CONCAT('A', CELLCOLUMN);
I := ORDEXCEL.INSERTDATA(CELLINDEX, N, 'I2');
CELLINDEX := CONCAT('B', CELLCOLUMN);
I := ORDEXCEL.INSERTDATA(CELLINDEX, C1_REC.AGNABBR, 'BSTR');
CELLINDEX := CONCAT('C', CELLCOLUMN);
I := ORDEXCEL.INSERTDATA(CELLINDEX, C1_REC.AGNNAME, 'BSTR');
CELLINDEX := CONCAT('D', CELLCOLUMN);
I := ORDEXCEL.INSERTDATA(CELLINDEX, N, 'I2');
N := N + 1;
end loop;
I := ORDEXCEL.INSERTCHART(350, 200, 250, 250, 'D2:D15', 'xlPie');
select FILENAME||TO_CHAR(sysdate, 'HH24MISS') into FILENAME from DUAL;
I := ORDEXCEL.SAVEEXCELFILE(FILENAME);
I := ORDEXCEL.EXITEXCEL();
end;
Работа с COM-объектами на сервере –
Формирование документа PDF

Apache FOP (Formatting Objects Processor) + XSL
Formatting Objects (XSL-FO)


http://xmlgraphics.apache.org/fop/
PL/PDF

http://www.plpdf.com/plpdf-sdk.html
Работа с COM-объектами на сервере – Как без
COM?

XML - XLS

http://msdn.microsoft.com/ru-ru/office/aa905546.aspx
Работа с COM-объектами на сервере – Как без
COM?

POI-HSSF (Poor Obfuscation Implementation Horrible SpreadSheet Format) и POI-XSSF
(Poor Obfuscation Implementation – XML
SpreadSheet Format)


http://poi.apache.org/spreadsheet/index.html
Java Excel API

http://jexcelapi.sourceforge.net/
Работа с функциями ОС сервера –
Принципиальная схема работы
Экземпляр БД
Java Class
PL/SQL-обёртка
Oracle
JVM
ОС
Прикладные
PL/SQL объекты
Область процессов экземпляра БД Oracle
Внешние проецессы
СЕРВЕР
Работа с функциями ОС сервера – Пример
выполнения команды ОС
create or replace and compile java source named "OsUtils" as
import java.io.IOException;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
class StreamGobbler
extends Thread {
InputStream is;
String type;
StreamGobbler (InputStream is, String type) {
this.is = is; this.type = type;
}
public void run () {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) OsUtils.result.append(line).append("\n");
} catch (IOException ioe) {ioe.printStackTrace();}
}
}
public class OsUtils {
public static StringBuffer result;
public static int runCommand (String command)
throws Throwable {
result = new StringBuffer(); Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(command);
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR");
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "OUTPUT");
errorGobbler.start(); outputGobbler.start();
proc.waitFor(); return proc.exitValue();
}
}
1. Java Class, выполняющий
команду операционной
системы
runCommand
Экспортируемая функция интерфейса класса
Runtime.getRuntime()
Runtime.exec(<КОМАНДА ОС>)
Работа с функциями ОС сервера – Пример
выполнения команды ОС
create or replace function udo_f_run_os_command (p_cmd in varchar2) return number as
language java name 'OsUtils.runCommand (java.lang.String) return int';
declare
result number;
begin
result := udo_f_run_os_command('C:\WINNT\system32\cmd.exe /c dir');
end;
exec dbms_java.grant_permission(user,
'SYS:java.io.FilePermission',
'C:\WINNT\system32\cmd.exe', 'execute' );
2. PL/SQL-обёртка
3. Использование для
прикладных целей
4. Назначение
дополнительных прав
доступа
Отправка E-Mail (SMTP) с вложением
conn:=utl_smtp.open_connection(MAIL_SERVER, MAIL_PORT);
utl_smtp.ehlo(conn, MAIL_SERVER);
utl_smtp.command(conn, 'AUTH LOGIN');
utl_smtp.command(conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(MAIL_USER))));
utl_smtp.command(conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(MAIL_USER_PASS))));
utl_smtp.mail(conn, MAIL_SENDER);
utl_smtp.open_data(conn);
write_mime_header(conn, 'To', MAIL_RECIVIER); write_mime_header(conn, 'Subject', MAIL_SUBJECT);
write_mime_header(conn, 'Sender', MAIL_SENDER); write_mime_header(conn, 'From', MAIL_SENDER);
write_mime_header(conn, 'Content-Language', 'ru'); write_mime_header(conn, 'Content-Type', 'text/plain; charset=Windows-1251');
write_mime_header(conn, 'Content-Transfer-Encoding', '8bit');
utl_smtp.write_data(conn, utl_tcp.crlf);
utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(MESSAGE));
utl_smtp.write_data(conn, utl_tcp.crlf); utl_smtp.write_data(conn, utl_tcp.crlf);
utl_smtp.write_data(v_Mail_Conn, '--'|| MAIL_SEPARATOR || utl_tcp.crlf );
utl_smtp.write_data(conn, 'Content-Type: '||ATT_MIME_TYPE||';'|| utl_tcp.crlf );
utl_smtp.write_data(conn, ' name="'||ATT_NAME||'"'|| crlf );
utl_smtp.write_data(conn, 'Content-Transfer-Encoding: base64'|| utl_tcp.crlf );
utl_smtp.write_data(conn, 'Content-Disposition: attachment;'|| utl_tcp.crlf );
utl_smtp.write_data(conn, ' filename="'||ATT_FILE_NAME||'"' || utl_tcp.crlf);
utl_smtp.write_data(conn, crlf );
ps:=1;
LOOP
BEGIN
dbms_lob.read(ATT_BLOB_DATA, 48, ps, att_raw_data);
ps := ps + 48;
utl_smtp.write_raw_data(conn, utl_encode.base64_encode(att_raw_data));
EXCEPTION
WHEN no_data_found THEN
EXIT;
END;
END LOOP;
utl_smtp.write_data(conn, '--' || MAIL_SEPARATOR || '--');
utl_smtp.write_data(conn, crlf ); utl_smtp.write_data(conn, crlf );
utl_smtp.close_data(conn);
utl_smtp.rset(conn);
utl_smtp.quit(conn);
Примеры применения
1. Эмуляция сервера печати для формирования “тяжелых” отчетов
(Пользовательская процедура Парус 8 + DBMS_JOB, DB Scheduler + ORDExcel + PrNotifier)
create procedure UDO_P_START_PRINTING
as
NJOB binary_integer;
begin
dbms_job.submit(job => NJOB
,what => 'begin UDO_P_DO_PRINTING; end;');
end;
create procedure UDO_P_DO_PRINTING
as
begin
I := ORDEXCEL.CREATEEXCELWORKSHEET('');
I := ORDEXCEL.INSERTDATA('A1', 'Номер', 'BSTR');
I := ORDEXCEL.SAVEEXCELFILE(FILENAME);
I := ORDEXCEL.EXITEXCEL();
...
P_NOTQUEUE_BASE_INSERT(nMSG_ID => GEN_ID
,nADDR_COMPANY => GET_SESSION_COMPANY
,sADDR_USER => ...
);
end;
Примеры применения
2. Автоматическая рассылка отчетности
(DBMS_JOB, DB Scheduler + ORDExcel + UTL_SMTP)
3. Ускорение печати “тяжелых отчетов”
(XML – XLS, ORDExcel)
4. Реализация конвертеров
(Исполнение команд ОС (UDO_F_RUN_OS_COMMAND) + UTL_FILE + PL/SQL + Парус 8 API)
Спасибо
Ваши вопросы
Related documents