Gå til innhold

Hvordan få spoolet ut en korrekt streng i Oracle hvor datofelt er et av utdatafeltene?


Anbefalte innlegg

Hei.

 

jeg har flere ganger opplevd at jeg lager en prosedyre i Oracle (gjerne PL/SQL), hvor jeg har en viss argument liste som input.

Ofte er det datoer med i bildet, og her kommer problemet.

 

Datoene kreves skrevet med ' tegnet forran og bak, og å få spoolet ut dette til en transaskjonsfil som ikke databasekyndige skal kunne benytte seg av, det viser seg å være svært vanskelig.

 

kode eksempel:

select 'exec hent_time(' || dato || ', 1);' as teksten
from test
order by dato;

 

Her er greia at det kjøres en exec kommando først som legger datoer inn i tabellen test. Test tabellen består av ID som er et NUMBER felt, og dato som er DATE. ID er et is not null felt, fordi det er primærnøkkel i tabellen.

 

Det ligger en lagret prosedyre som heter hent_time, som skal lete i en masse tabeller, behandle dataene, og legge bare de forekomster som ikke eksisterer i en tabell inn i en annen. enkelt forklart selvsagt ;)

 

Problemet mitt er at jeg tenkte å lage en bat fil som kan startes fra et ikon på desktop til noen brukere her, hvor de blir promptet for å legge inn to parametre. Også kjøres først den ene prosedyren, som legger datoer inn i test tabellen hvor datoene da representerer input til neste prosedyre.

Så skal det spooles ut en fil med exec kommandoen og to argumenter inn. Det ene er dato, det andre er periode lengde, den er alltid 1, så det hardkoder jeg bare et 1 tall på.

Mitt store problem er:

  1. Åssen skal jeg klare å få ' tegnet forran og bak datoen når jeg spooler?
  2. Og hvordan ungår jeg å få SQL> (altså sql prompt) med på ut filen min. Jeg vil bare ha resultatet ut, ikke noe mer enn det.

Jeg har gått rundt problemet ved å hardkode ' tegnet i prosedyren, slik at den alltid setter det forran og bak, for da kan input være uten tegnene.

Men det irriterer meg at jeg ikke vet hvordan jeg gjør dette.

Endret av Wolverin
Lenke til kommentar
Videoannonse
Annonse
Hei.

 

jeg har flere ganger opplevd at jeg lager en prosedyre i Oracle (gjerne PL/SQL), hvor jeg har en viss argument liste som input.

Ofte er det datoer med i bildet, og her kommer problemet.

 

Datoene kreves skrevet med ' tegnet forran og bak, og å få spoolet ut dette til en transaskjonsfil som ikke databasekyndige skal kunne benytte seg av, det viser seg å være svært vanskelig.

 

kode eksempel:

select 'exec hent_time(' || dato || ', 1);' as teksten
from test
order by dato;

 

Her er greia at det kjøres en exec kommando først som legger datoer inn i tabellen test. Test tabellen består av ID som er et NUMBER felt, og dato som er DATE. ID er et is not null felt, fordi det er primærnøkkel i tabellen.

 

Det ligger en lagret prosedyre som heter hent_time, som skal lete i en masse tabeller, behandle dataene, og legge bare de forekomster som ikke eksisterer i en tabell inn i en annen. enkelt forklart selvsagt ;)

 

Problemet mitt er at jeg tenkte å lage en bat fil som kan startes fra et ikon på desktop til noen brukere her, hvor de blir promptet for å legge inn to parametre. Også kjøres først den ene prosedyren, som legger datoer inn i test tabellen hvor datoene da representerer input til neste prosedyre.

Så skal det spooles ut en fil med exec kommandoen og to argumenter inn. Det ene er dato, det andre er periode lengde, den er alltid 1, så det hardkoder jeg bare et 1 tall på.

Mitt store problem er:

  1. Åssen skal jeg klare å få ' tegnet forran og bak datoen når jeg spooler?
  2. Og hvordan ungår jeg å få SQL> (altså sql prompt) med på ut filen min. Jeg vil bare ha resultatet ut, ikke noe mer enn det.

Jeg har gått rundt problemet ved å hardkode ' tegnet i prosedyren, slik at den alltid setter det forran og bak, for da kan input være uten tegnene.

Men det irriterer meg at jeg ikke vet hvordan jeg gjør dette.

 

Fant svar på det ene av spørsmålene:

select 'exec hent_time(''' ||  dato || ''', 1);' as teksten
from test
order by dato;

 

Løsningen er altså 3 ' tegn.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...