2016-12-21 5 views
0

パテントからシェルスクリプトを実行して、パッケージ仕様と本体をデータベース(Oracle)にコンパイルしようとしています。私の最終的な目標は、.ldtファイルを使用してこのパッケージを実行するコンカレントプログラムを登録することです。 Iの特定のパスにあるファイル(.pkbと.pks)を有し、そしてIは、以下のスクリプトを使用してみました:シェルスクリプトを使用してパッケージ仕様と本体をコンパイルする際の問題

# 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 
} 

次のようRunSQLScriptが定義されている

... 
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 
... 

を問題は私が画面上で "スクリプト[ファイル名を指定して実行中]"を取得することですが、その後は何もしません。また、 "Script complete"メッセージもエラーメッセージも表示されません。

しかし、ログファイルには、上記の同じメッセージ/ログテキストの後に、「26文字までの入力が終了しました」という追加の文字列があります。私は検索しましたが、これをすばやく修正することは、スクリプトの最後に「/」を追加することでした。しかし、その後も出力やログに変化はありませんでした。それが元の問題に関連しているかどうかはわかりません。

カスタムとアプリケーションの資格情報は、スクリプトを実行するたびに最初に検証されます。

EDIT:アレックス

によって要求されたパッケージ仕様と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 
} 
+0

あなたの.pksと.pkbスクリプトの最後に「終了」がありますか?私はあなたがスラッシュを追加したと言っていないと思う。そうすれば、ハングアップしているように見えます。exitを入力すると、スクリプトが完了するようになります。しかし、 'input terminated ...'というメッセージがどこから来ているのかわからない。あなたの.pksファイルのその文字列ですか? –

+0

@AlexPoole私のスクリプト全体は.shファイルにあります。このファイルには、スクリプトが完了するための他のタスクも含まれています。このスクリプトはこれ以上のことさえ実行しません。私のパッケージのスペックとボディファイルは専用の/ binフォルダにあります。どこにEXITを追加することを提案していますか? –

+0

私が言ったように、 '.pks'と' .pkb'ファイルの最後に。 '@' SQL \ '* PlusでSQLスクリプトを実行しても自動的に終了しない場合は、その旨を伝える必要があります。最初は、すでにSQLスクリプトにexitがあるかどうかを確認しようとしています。そうでない場合は、1つを追加する必要があります。 –

答えて

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スクリプトがうまく同じ問題を抱えていることがあります。

+0

ありがとう!あなたの説明は完璧でした。 Unixプロンプトで/とEXITを同じ結果で使用しようとしました。アレックスはとても感謝しています。 –

関連する問題