なぜこれが私に価値を促しているのでしょうか?バッチファイルを介してスクリプトを呼び出しています。
DECLARE
precount NUMBER;
nowcount NUMBER;
BEGIN
SELECT COUNT(*) INTO precount FROM PLAN_OFFER_BK_PRE_SCRIPT WHERE COV_IN = 'Y' AND PLAN_IN = 'Y';
SELECT COUNT(*) INTO nowcount FROM PLAN_OFFER WHERE COV_IN = 'Y' AND PLAN_IN = 'Y';
END;
/
-- NUMBER OF MEC/MVP RECORDS
SPOOL logs\MVP_MEC_UPDATED.log APPEND
Prompt &&CLIENTID &&precount &&nowcount
SPOOL OFF;
ありがとう!
アンパサンド文字(&
)は、デフォルトで実行時間前に値を要求します。これは、変数の値を表示する方法ではありません。代わりに以下をお試しください。
set serveroutput on
SPOOL logs\MVP_MEC_UPDATED.log APPEND
DECLARE
precount NUMBER;
nowcount NUMBER;
BEGIN
SELECT COUNT(*) INTO precount FROM PLAN_OFFER_BK_PRE_SCRIPT WHERE COV_IN = 'Y' AND PLAN_IN = 'Y';
SELECT COUNT(*) INTO nowcount FROM PLAN_OFFER WHERE COV_IN = 'Y' AND PLAN_IN = 'Y';
dbms_output.put_line('precount: ' || precount || ', nowcount:' || nowcount );
END;
/
SPOOL OFF
SQL * Plusでスクリプトに変数を渡す。スクリプト、たとえば、1.sql
:
set serveroutput on feedback off verify off
define CLIENTID=&1
SPOOL logs\MVP_MEC_UPDATED.log APPEND
DECLARE
precount NUMBER;
nowcount NUMBER;
BEGIN
SELECT COUNT(*) INTO precount FROM PLAN_OFFER_BK_PRE_SCRIPT WHERE COV_IN = 'Y' AND PLAN_IN = 'Y';
SELECT COUNT(*) INTO nowcount FROM PLAN_OFFER WHERE COV_IN = 'Y' AND PLAN_IN = 'Y';
dbms_output.put_line('CLIENTID: ' || '&CLIENTID' || ', precount: ' || precount || ', nowcount:' || nowcount );
END;
/
SPOOL OFF
exit
それを呼び出す:
sqlplus -s user/password @1.sql 101
ここで、101はCLIENTID
です。または:
sqlplus -s user/password @1.sql %CLIENTID%
どこ %CLIENTID%
は、バッチスクリプト内の変数です。
&& CLIENTID && precountおよび&& nowcountの入力を求められますか?
あなたの問題の原因はそこにあると思います。
Precountとnowcountの結果を表示したい場合は、次のことを試してください。
サーバー出力をオンに設定
DECLARE
precount NUMBER;
nowcount NUMBER;
BEGIN
SELECT COUNT(*) INTO precount FROM PLAN_OFFER_BK_PRE_SCRIPT WHERE COV_IN = 'Y' AND PLAN_IN = 'Y';
SELECT COUNT(*) INTO nowcount FROM PLAN_OFFER WHERE COV_IN = 'Y' AND PLAN_IN = 'Y';
dbms_output.put_line(precount);
dbms_output.put_line(nowcount);
END;
/