bashスクリプトから、ストアド・プロシージャをpythonスクリプトからコールしようとしています。スクリプトの呼び出しは正常に動作しますが、問題はありません。問題はPRIMARY_KEYS
フィールドのパラメータにあります。単一PK
で、それが正常に動作しますが、複数のPK
すなわち、A, B, C
のために、私はOracleエラーを取得:ORA-01756: quoted string not properly terminated
bashスクリプトからストアド・プロシージャをコールすると、ORA-01756:引用符付きの文字列が正しく終了しない
のPython:
...
cmd = 'sh pkg_mypkg.sh \'%s\' \'%s\' my_sp_which_adds_a_primary_key \'%s\'' % db_login_str db_table primary_keys
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=TRUE)
...
バッシュ:
DB_LOGIN_STR=$1
DB_TABLE=$2
FUNC_TO_EXEC=$3
PRIMARY_KEYS=$4
...
function my_sp_which_adds_a_primary_key() {
SP_RES=`sqlplus -silent $1 <<-EOM
...
BEGIN
pkg_mypkg.my_sp_which_adds_a_primary_key($2, $3);
END;
...
EOM`
echo $SP_RES
}
...
function main() {
case $FUNC_TO_EXEC in
"my_sp_which_adds_a_primary_key")
my_sp_which_adds_a_primary_key(DB_LOGIN_STR, DB_TABLE, PRIMARY_KEYS);;
esac
}
main
SP:
をprocedure my_sp_which_adds_a_primary_key(db_table in varchar2, primary_keys in varchar2)
is
begin
execute immediate 'alter table ' || db_table || ' add constraint ' || db_table || '_PK primary_key (' || primary_keys || ') parallel 8';
end my_sp_which_adds_a_primary_key;
免責事項として、私はテステストウィンドウでこの関数をPLSQLのUIインターフェイスの中で直接テストし、それは複数のw /複数でうまく動作しますPKs
私が理解できないBash内で実行されたときに、格納されたprocにどのように渡っているかに問題があります。私は\'\'%s\'\'
、\'%s\'
、\'\"%s\"
、"%s"
の組み合わせを試してみました。正しいフォーマットが何であるかはっきりしていません。事前に
おかげで、私が試してみた
ありがとう、私はすぐにそれらをテストするつもりです。今のところ、 'PRIMARY_KEY' var内の空白を削除したので、' A、B、C'は 'A、B、C'になりました。 「A、B、C」がちょうど「A」になったところで、うごめきなことが起こっていました。 – Qbert