SQL parancsokat nem tudom beletenni egy PL/SQL blokkba
2021-07-13T08:43:08+02:00
2021-07-13T15:50:00+02:00
2022-08-12T03:40:31+02:00
splash05
set linesize 500
set echo off
set feedback off
--set prompt off
set pagesize 0

spool abcd.csv

select cikk_azon || ';' || cikk_nev from cikk_lista;

spool off

Ez lenne a kérdéses utasítás sorozat. Ezeket kijelölve és szkriptként lefuttatva megjelenik a fájl (az a célom, hogy ütemezett job-ot is használva csv fájlt tudjak generálni) viszont ha egy futtatható fájlként adom meg a job definiálásánál, akkor meg nem generálódik a csv.

Job-ban ugye nemcsak futtatható fájlt hanem PL/SQL blokkot vagy tárolt eljárást is meg lehet adni (hogy azt hajtsa végre), de így meg hibát jelez:

begin
set linesize 500
set echo off
set feedback off
--set prompt off
set pagesize 0
spool abcd.csv
select cikk_azon || ';' || cikk_nev from cikk_lista;
spool off
end;
Mutasd a teljes hozzászólást!
Ebből megsejtjük, hogy kliensoldalon szeretnéd, mégpedig Windows-ban, tehát a "Feladatütemező" nevű eszközt kellene megkeresned.

Legyen egy C:\SOMEPATH\CVSGEN.SQL:

set linesize 500 set echo off set feedback off --set prompt off set pagesize 0 spool abcd.csv select cikk_azon || ';' || cikk_nev from cikk_lista; spool off
Meg egy C:\SOMEPATH\CVSGEN.CMD:

@echo off C: CD \SOMEPATH\ REM Itt lehetne PATH-t, ORACLE_HOME-ot, NLS_LANG-ot állítani SQLPLUS.EXE dbuser/dbpwd@tnsid @CVSGEN.SQL >CVSGEN.LOG 2>&1
Ezt az utóbbit kellene időzítetten futtatni.
Mutasd a teljes hozzászólást!

  • Kérlek, használd a </>forráskód</> gombot, amikor programrészeket idézel be.

    Az Sql*Plus utasításait (set, spool) a PL/SQL nyelv nem ismeri.

    Igazából mit szeretnél, hol keletkezzen a csv fájl időzítve: a kliensen, vagy a serveren?

    Ha a kliensen, akkor a mostani scriptedet futtatsd crontab-bal, ha a szerveren, akkor az UTL_FILE csomagot használhatod.
    Mutasd a teljes hozzászólást!
  • Oracle SQL Developert használok.

    Akár a kliensen akár az asztalon, nem tudom melyik milyen célt szolgál. Mondjuk az kliens asztalára 1 óránként mindig exportálja a csv-t. De sehogy nem akar működni. Ha tárolt eljárásba teszem, akkor is nyavajog az első set-re:

    </> create or replace procedure is
    set linesize 500
    set echo off
    set feedback off
    --set prompt off
    set pagesize 0
    begin
    spool abcd.csv

    select cikk_azon || ';' || cikk_nev from cikk_lista;

    spool off
    end;
    </>

    De akkor ha nem ismeri egyáltalán a spool, set utasítást, akkor legegyszerűbben tárolt eljárással, hogy lehetne megoldani?
    Mutasd a teljes hozzászólást!
  • Ebből megsejtjük, hogy kliensoldalon szeretnéd, mégpedig Windows-ban, tehát a "Feladatütemező" nevű eszközt kellene megkeresned.

    Legyen egy C:\SOMEPATH\CVSGEN.SQL:

    set linesize 500 set echo off set feedback off --set prompt off set pagesize 0 spool abcd.csv select cikk_azon || ';' || cikk_nev from cikk_lista; spool off
    Meg egy C:\SOMEPATH\CVSGEN.CMD:

    @echo off C: CD \SOMEPATH\ REM Itt lehetne PATH-t, ORACLE_HOME-ot, NLS_LANG-ot állítani SQLPLUS.EXE dbuser/dbpwd@tnsid @CVSGEN.SQL >CVSGEN.LOG 2>&1
    Ezt az utóbbit kellene időzítetten futtatni.
    Mutasd a teljes hozzászólást!
  • Szuper, köszi. Azt még megkérdezem, hogyha szerver oldalon szeretném futtatni, akkor miben módosulna a megvalósítás?
    Mutasd a teljes hozzászólást!
  • Például a file is a szerveren keletkezne, tehát nem férnél hozzá.
    De ha tanulni szeretnél, kezdd itt: UTL_FILE
    Mutasd a teljes hozzászólást!
  • mondjuk ezt az sqlplus.exe-et nem értem, mert oracle sql developert használok
    Mutasd a teljes hozzászólást!
  • A developer nem működik batch-ként, az sqlplus.exe meg igen. Itten van:
    %ORACLE_HOME%\bin\sqlplus.exe, vagy simán %ORACLE_HOME%\sqlplus.exe (ha InstantClient)
    Mutasd a teljes hozzászólást!
abcd