使用Shell脚本

时间:2016-12-21 07:32:11

标签: sql oracle bash unix sh

我试图通过从Putty运行Shell脚本来将包规范和主体编译到数据库(Oracle)中。我的最终目标是使用.ldt文件注册并发程序以运行此程序包。 我在特定路径中有文件(.pkb和.pks),我尝试使用以下脚本:

...
WriteMessage "Creating package XLRIPHD_BOMREPORT_PKG.pks"
RunSQLScript $XXMOB_TOP/sql/XLRIPHD_BOMREPORT_PKG.pks

WriteMessage "Creating package XLRIPHD_BOMREPORT_PKG.pkb"
RunSQLScript $XXMOB_TOP/sql/XLRIPHD_BOMREPORT_PKG.pkb
...

RunSQLScript 定义如下:

# RunSQLScript
#  Runs the given SQL script.  The script must accept apps and custom
#  credentials (whether or not they are used)
#  $1 = filename
#---------------------------------------------------------------------
RunSQLScript()
{
  if [ $errorFlag = N ] ; then    
    WriteMessage "Running script ${1}"      
    if sqlplus -s $appsCredentials @${1} $appsCredentials $customCredentials >> $logFile
    then
      WriteMessage "Script ${1} complete."
    else
      WriteMessage "Error running script ${1} - please check the log"
      errorFlag=Y
    fi
  fi
}

问题是我得到了#34;运行脚本[filename]"在屏幕上,但之后没有。我也没有完成"脚本完成"消息也不是错误消息。

但是,在日志文件中,在上述相同的消息/日志文本之后,还有一个"输入终止于26个字符"。我搜索并快速解决这个问题是添加' /'到了脚本的末尾,我做了。但即使在此之后,输出或日志也没有变化。我不确定这是否与原始问题有关。

每次运行脚本时,都会在最初验证自定义和应用程序凭据。

编辑:按照Alex的要求添加Package Spec和WriteMessage

PKS档案内容

create or replace 
PACKAGE XLRIPHD_BOMREPORT_PKG
AS
/***********************************************************************************
* Company Name          : XLRI PHD
* Script Name           : XLRIPHD_BOMREPORT_PKG.pks
* Program Type          : PL SQL Package specification BOM Criticality Report
* Program Description   : BOM Criticality Report extraction from oracle EBS 11i 
* Parameters            :
* Author                : Subhasish
* Date                  : 25-OCT-2016
* Modification Details  : Date       Modified By      Comments
*                        ---------  --------------   -------------------------
* Comments              : 
*                         
***************************************************************************************/
PROCEDURE XLRI_BOM_ANALYSIS (
      ERRBUF           OUT   VARCHAR2,
      RETCODE          OUT   NUMBER,
      p_org_id         IN NUMBER
   );

END XLRIPHD_BOMREPORT_PKG
EXIT;

的WriteMessage:

WriteMessage()
{
  echo "$1"
  echo "\n$1" >> $logFile
}

1 个答案:

答案 0 :(得分:0)

您的包装说明不完整。 END需要以分号结束,the whole PL/SQL section needs to be terminated with a slash - 否则CREATE语句永远不会被执行,而SQL * Plus只是在提示等待您输入更多内容码。 (由于-s标志,行号提示未显示在日志中。

您的脚本应以:

结尾
...
PROCEDURE XLRI_BOM_ANALYSIS (
      ERRBUF           OUT   VARCHAR2,
      RETCODE          OUT   NUMBER,
      p_org_id         IN NUMBER
   );

END XLRIPHD_BOMREPORT_PKG;
/

EXIT;

您的.pkg脚本可能会遇到同样的问题。