パテントからシェルスクリプトを実行して、パッケージ仕様と本体をデータベース(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
}
あなたの.pksと.pkbスクリプトの最後に「終了」がありますか?私はあなたがスラッシュを追加したと言っていないと思う。そうすれば、ハングアップしているように見えます。exitを入力すると、スクリプトが完了するようになります。しかし、 'input terminated ...'というメッセージがどこから来ているのかわからない。あなたの.pksファイルのその文字列ですか? –
@AlexPoole私のスクリプト全体は.shファイルにあります。このファイルには、スクリプトが完了するための他のタスクも含まれています。このスクリプトはこれ以上のことさえ実行しません。私のパッケージのスペックとボディファイルは専用の/ binフォルダにあります。どこにEXITを追加することを提案していますか? –
私が言ったように、 '.pks'と' .pkb'ファイルの最後に。 '@' SQL \ '* PlusでSQLスクリプトを実行しても自動的に終了しない場合は、その旨を伝える必要があります。最初は、すでにSQLスクリプトにexitがあるかどうかを確認しようとしています。そうでない場合は、1つを追加する必要があります。 –