patternMinor
SQLPLUS: SELECT INTO prompting for variable value
Viewed 0 times
intopromptingvalueforselectsqlplusvariable
Problem
Any idea why this is prompting me for the value? I'm calling the script via batch file:
Thanks!
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;Thanks!
Solution
The ampersand character (
Passing a variable to a script in SQL*Plus. The script, let's say,
Invoking it:
Where 101 is the
Where
&) prompts for values before execution time by default. That is not how you display values of variables. Try the below instead.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 OFFPassing a variable to a script in SQL*Plus. The script, let's say,
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
exitInvoking it:
sqlplus -s user/password @1.sql 101Where 101 is the
CLIENTID. Or:sqlplus -s user/password @1.sql %CLIENTID%Where
%CLIENTID% is a variable in your batch script.Code Snippets
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 OFFset 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
exitsqlplus -s user/password @1.sql 101sqlplus -s user/password @1.sql %CLIENTID%Context
StackExchange Database Administrators Q#132304, answer score: 2
Revisions (0)
No revisions yet.