Frage Wie kann ich Parameter an SQL-Skript übergeben?


CREATE TABLE DMS_POP_WKLY_REFRESH_20100201 NOLOGGING PARALLEL AS
SELECT 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_flag
FROM   spineowner.pop_wkly_refresh_20100201 wk,
       dms_bb_coverage_102009 bbc,
       dms_select_executive_group sel,
       DMS_RESIGN_CAMPAIGN_26052009 res,
       DMS_PRIORITY_CLUB pclub
WHERE  wk.mpn = bbc.mpn(+)
AND    wk.mpn = sel.mpn (+)
AND    wk.mpn = res.mpn (+)
AND    wk.mpn = pclub.mpn (+)

vijay.sql (Name, der dem obigen sql-Skript übergeben wurde)

Wie kann ich einen Parameter für 20100201 in der Seite des SQL-Skript übergeben, muss ich jedes Mal dieses Datumsformat ändern. Wie kann ich dieses SQL-Skript aufrufen und unter Unix ausführen, indem ich das Datum als Parameter übergebe. Daher sollte das Datum im Skript bei jedem Lauf geändert werden

Bitte hilf mir.


12
2018-02-10 10:56


Ursprung


Antworten:


SQL * Plus verwendet & 1, & 2 ... & n, um auf die Parameter zuzugreifen.

Angenommen, Sie haben das folgende Skript test.sql:

SET SERVEROUTPUT ON
SPOOL test.log
EXEC dbms_output.put_line('&1 &2');
SPOOL off

Sie könnten dieses Skript zum Beispiel so nennen:

$ sqlplus login/pw @test Hello World!

Bearbeiten:

In einem UNIX-Skript würden Sie normalerweise ein SQL-Skript wie folgt aufrufen:

sqlplus /nolog << EOF
connect user/password@db
@test.sql Hello World!
exit
EOF

damit Ihr Login / Passwort bei einer anderen Sitzung nicht sichtbar ist ps


18
2018-02-10 11:07



Zwei Optionen Speichern Sie vijay.sql

declare
begin
execute immediate 
'CREATE TABLE DMS_POP_WKLY_REFRESH_'||to_char(sysdate,'YYYYMMDD')||' NOLOGGING PARALLEL AS
SELECT 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_flag
FROM   spineowner.pop_wkly_refresh_20100201 wk,
       dms_bb_coverage_102009 bbc,
       dms_select_executive_group sel,
       DMS_RESIGN_CAMPAIGN_26052009 res,
       DMS_PRIORITY_CLUB pclub
WHERE  wk.mpn = bbc.mpn(+)
AND    wk.mpn = sel.mpn (+)
AND    wk.mpn = res.mpn (+)
AND    wk.mpn = pclub.mpn (+)'
end;
/

Das obige generiert Tabellennamen automatisch basierend auf sysdate. Wenn Sie noch als Variable übergeben müssen, speichern Sie vijay.sql als

declare
begin
execute immediate 
'CREATE TABLE DMS_POP_WKLY_REFRESH_'||&1||' NOLOGGING PARALLEL AS
SELECT 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_flag
FROM   spineowner.pop_wkly_refresh_20100201 wk,
       dms_bb_coverage_102009 bbc,
       dms_select_executive_group sel,
       DMS_RESIGN_CAMPAIGN_26052009 res,
       DMS_PRIORITY_CLUB pclub
WHERE  wk.mpn = bbc.mpn(+)
AND    wk.mpn = sel.mpn (+)
AND    wk.mpn = res.mpn (+)
AND    wk.mpn = pclub.mpn (+)'
end;
/

und dann als laufen sqlplus -s Benutzername / Passwort @ vijay.sql '20100101'


1
2018-02-10 16:08