How can I pass a parameter to a t-sql script?
SQL*Plus uses &1, &2... &n to access the parameters.
Suppose you have the following script test.sql
:
SET SERVEROUTPUT ONSPOOL test.logEXEC dbms_output.put_line('&1 &2');SPOOL off
you could call this script like this for example:
$ sqlplus login/pw @test Hello World!
Edit:
In a UNIX script you would usually call a SQL script like this:
sqlplus /nolog << EOFconnect user/password@db@test.sql Hello World!exitEOF
so that your login/password won't be visible with another session's ps
Two options save vijay.sql
declarebeginexecute immediate 'CREATE TABLE DMS_POP_WKLY_REFRESH_'||to_char(sysdate,'YYYYMMDD')||' NOLOGGING PARALLEL ASSELECT wk.*,bbc.distance_km ,NVL(bbc.tactical_broadband_offer,0) tactical_broadband_offer , sel.tactical_select_executive_flag, sel.agent_name, res.DMS_RESIGN_CAMPAIGN_CODE, pclub.tactical_select_flagFROM spineowner.pop_wkly_refresh_20100201 wk, dms_bb_coverage_102009 bbc, dms_select_executive_group sel, DMS_RESIGN_CAMPAIGN_26052009 res, DMS_PRIORITY_CLUB pclubWHERE wk.mpn = bbc.mpn(+)AND wk.mpn = sel.mpn (+)AND wk.mpn = res.mpn (+)AND wk.mpn = pclub.mpn (+)'end;/
The above will generate table names automatically based on sysdate. If you still need to pass as variable, then save vijay.sql as
declarebeginexecute immediate 'CREATE TABLE DMS_POP_WKLY_REFRESH_'||&1||' NOLOGGING PARALLEL ASSELECT wk.*,bbc.distance_km ,NVL(bbc.tactical_broadband_offer,0) tactical_broadband_offer , sel.tactical_select_executive_flag, sel.agent_name, res.DMS_RESIGN_CAMPAIGN_CODE, pclub.tactical_select_flagFROM spineowner.pop_wkly_refresh_20100201 wk, dms_bb_coverage_102009 bbc, dms_select_executive_group sel, DMS_RESIGN_CAMPAIGN_26052009 res, DMS_PRIORITY_CLUB pclubWHERE wk.mpn = bbc.mpn(+)AND wk.mpn = sel.mpn (+)AND wk.mpn = res.mpn (+)AND wk.mpn = pclub.mpn (+)'end;/
and then run assqlplus -s username/password @vijay.sql '20100101'