Oracle EBS调用SHELL的方法
目前主要有4种类型:
1. 调用包dbms_pipe,此方法需要调用proc程序
2. 运用java source方法,
3. 调用包DBMS_SCHEDULER
4. 运用EBS的功能,编写主机并发程序(Host based concurrent program)
说明:对于方法1-3 ,参考以下地址:
http://blog.csdn.net/wzy0623/archive/2007/06/26/1666708.aspx
本文档重点说明第二,第四种方法:参考文档如下:
http://www.oracleappshub.com/aol/4-steps-for-host-based-concurrent-program/
一:设定主机并发程序的步骤(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. 在数据库中注册需要压缩文件所对应的目录
CREATE OR REPLACE DIRECTORY TVSN_REQUEST_OUTPUT_DIR AS '/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
import java.io.*;
public class TvsnCommand{
public static String 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. 创建封装函数:
CREATE OR REPLACE FUNCTION Tvsn_ExecuteCmd_Run(Command IN STRING)
RETURN VARCHAR2 IS
LANGUAGE JAVA NAME 'TvsnCommand.Run(java.lang.String)return int';
3. 以sys或者system帐户登陆sqlplus,为数据库用户分配权限:
SQL>execute dbms_java.grant_permission( 'APPS','SYS:java.io.FilePermission','<
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中注册!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/67253/viewspace-612089/ ,如需转载,请注明出处,否则将追究法律责任。