Oracle EBS调用SHELL的方法
目前主要有4种类型:
1.调用包dbms_pipe,此方法需要调用proc程序
2.运用java source方法,
3.调用包DBMS_SCHEDULER
4.运用EBS的功能,编写主机并发程序(Host based concurrent program)
说明:对于方法1-3,参考以下地址:
本文档重点说明第二,第四种方法:参考文档如下:
一:设定主机并发程序的步骤(Steps for Host based concurrent program)
1.创建一个脚本,并且扩展名保存为.prog,然后放在application top bin($XX_TOP/bin)的文件夹下(例如客制化的application名字叫TVSN,则脚本应该放在$TVSN_TOP/bin下)
2.在路径为$XX_TOP/bin目录下建立连接:ln -s $FND_TOP/bin/fndcpesr
(例如:客制化的application名字叫TVSN,则在该$TVSN_TOP/bin目录下,运行该命令)
注意:该命令中的脚本名字不能带.prog后缀
3.在EBS中注册该程序(和挂report的方法一致)
系统管理员->并发->程序 ->执行
系统管理员 ->并发->程序 ->定义
系统管理员 ->安全性->职责 ->请求
注意:注册执行时,程序的执行方法选择“主机”(HOST)
执行名中的脚本名称不带.prog
4.补充说明:
.prog脚本的说明:
a).prog脚本必须至少包含4个参数,用$1 ,$2,$3,$4,与它们对应
SQL_USER_PASS=${FCP_LOGIN-$1} –是数据库APPS帐户的密码
APP_USER_ID=$2--是当前的用户ID
APP_USER_NAME=$3--取得当前用户的名称
P_CONC_REQUEST_ID=$4--是并发请求的提交ID
b) shell脚本运行成功,返回0,如果遇到错误,则使用结束命令(exit 1)返回
c)创建完脚本后,必须与$FND_TOP目录下的fndcpesr进行链接,(fndcpesr主要用于应用对于shell脚本的编译)
测试范例:
1.在数据库中注册需要压缩文件所对应的目录
CREATEORREPLACEDIRECTORYTVSN_REQUEST_OUTPUT_DIRAS'/d01/testcomn/admin/out/TEST_oracleapp'
2.创建.prog脚本:
并将该脚本传到$TVSN_TOP/bin目录下面
3.建立连接:
ln -s $FND_TOP/bin/fndcpesr /d01/testappl/tvsn/1.0.0/bin/TVSN_ZIPFILE
4.在ebs中注册:
系统管理员->并发->程序->执行
Executable
TVSN_FILEZIP
Short Name
TVSN_FILEZIP
Description
Application
TVSN Customization
Execution Method
Host
Execution File Name
TVSN_ZIPFILE
系统管理员->并发->程序->定义
Program
TVSN_ZIPFILE
Short Name
TVSN_ZIPFILE
Description
Application
TVSN Customization
Execution Name
TVSN_ZIPFILE
Output Format
Text
Output Columns
Output Rows
Output Style
Seq
Parameter
Token
Value Set
Default Type
Default value
Required
Display
Size
(Display/Description/Concatenated)
Prompt
10
virual_dir
240 Characters
N
Y
50
路径
20
zip_filename
240 Characters
N
Y
50
文件名
二:关于使用JAVA SOURCE调用OS的步骤(Steps for java source)
说明:参考文档:metalink doc id:165256.1
1.创建java source:
注意:java程序区分大小写
create or replace and compile java source named tvsncommand as
importjava.io.*;
publicclassTvsnCommand{
publicstaticString Run(String Command){
try{
Runtime.getRuntime().exec(Command);
return("0");
}
catch(Exception e){
System.out.println("Error running command: "+ Command +
"\n"+ e.getMessage());
return(e.getMessage());
}
}
}
2.创建封装函数:
CREATEORREPLACEFUNCTIONTvsn_ExecuteCmd_Run(CommandINSTRING)
RETURNVARCHAR2IS
LANGUAGEJAVANAME'TvsnCommand.Run(java.lang.String)return int';
3.以sys或者system帐户登陆sqlplus,为数据库用户分配权限:
SQL>execute dbms_java.grant_permission( 'APPS','SYS:java.io.FilePermission','<>','execute');
SQL>execute dbms_java.grant_permission( 'APPS','SYS:java.lang.RuntimePermission','*','writeFileDescriptor');
SQL>execute dbms_java.grant_permission( 'APPS','SYS:java.lang.RuntimePermission','*','readFileDescriptor');
SQL>COMMIT;
说明:APPS为数据库用户,必须大写
4.使用该程序包时需要注意操作目录的权限问题,对于需要操作的目录,必须先在dba_directories中注册!