29. marts 2004 - 17:22Der er
15 kommentarer og 6 løsninger
Oracle til xml
Jeg skal have dannet en xml-fil ud fra nogle data i en oracle-database - og xml-filen skal fodres med data ca en gang i timen... dette burde jeg jo kunne lave vha ASP og et scheduled task, men findes der ikke en let og elegant måde man kan gøre det på i oracle?
XML-filen skal ligge på server X og Oracle kører på server Y - og i første omgang er det kun data fra én tabel, men kan det gøres ret simpelt skal det udviddes og så kan der komme mange tabeller med ind.
Så kan jeg gøre noget let - eller skal jeg hive noget ASP op ad skuffen?
Bavarian Nordics vækst blev starten på et DevOps-samarbejde med Novataris for hurtigt at kunne tilpasse IT-organisation til forretningen.
7. december 2023
Slettet bruger
29. marts 2004 - 17:54#1
Det simpleste ville være at lave det i SQL*Plus. Hvis du ikke har installeret Oracle-klienten på server X, kan du måske køre det på server Y og spoole til fil på drev, mappet fra X?
Du kunne så have en danXML.sql fil:
spool dual.xml prompt <xml ....> prompt <dual> select '<dummy>' || dummy || '</dummy>' from dual; prompt </dual> spool off
Hvis jeg gør ovenstående så skal jeg stadig sætte det op som et job - right?
Hvis nu min tabel hedder "sejedata" og der i den er 3 kolonner "id", "navn" og "placering" og det kun er dem med placering = 2 der skal ud - hvad så? Hele resultatet skal selvfølgelig ned i XML-filen, men navnene på rækkerne skal ikke være id, navn og placering som i basen men i stedet "tal", "tekst" og "side" - hvad så?
(skal nok afsætte flere point hvis det kræves)
Synes godt om
Slettet bruger
29. marts 2004 - 22:43#3
Du skal vel altid sætte et job op. Det kan du selvfølgelig gøre ved at bruge Oracles DBMS_JOB-pakke. Men var det ikke nemmere at bruge Windows scheduled tasks til at kalde en bat-fil?
Din bat-fil skulle så kalde sqlplus:
sqlplus system/manager @danXML.sql
og danXML.sql skulle være noget lignende:
spool dual.xml prompt <xml ....> prompt <sejedata> select '<tal>' || id || '</tal>' || '<tekst>' || navn || '</tekst>' || '<side>2</side>' from sejedata where placering=2; prompt </sejedata> spool off
jeg prøver lige ovenstående og ser hvad jeg kan få til at køre :)
hvis nu jeg så skulle hive "plac_navn" ud af tabellen "placering" som kan joines med id = placering så er det vel bare SQL-sætningen der skal ændres i?
Synes godt om
Slettet bruger
30. marts 2004 - 07:18#6
Ja - exit lige efter spool off-linien.
Hvis "plac_navn" ligger i tabellen placering, skal du vel ikke joine med noget, det er jo allerede placering du selecter ra.
Jeg sidder lige og kigger på de data der ligger i databasen og der kan jeg se at der er ét felt hvor der skal udskrives noget andet til XML-filen i forhold til indholdet i basen. Fx kan der stå "1_u" i basen, men ved udskrivning skal der skrives "7"... kan man foretage sådanne konverteringer?
hmm - sidder lige og leger med det... det starter fint nok SQLplus op men den kommer med en ORA-12560: TNS:Protikoladaptor-fejl og derefter spørger den om brugernavn og password selvom jeg har ændret dette i bat-filen?
Synes godt om
Slettet bruger
30. marts 2004 - 23:59#10
Sidder du på Oracle-serveren? Har du startet databasen? Har du startet Oracle-listener?
Så kan du ...
1. Sætte ORACLE_SID: 'SET ORACLE_SID=<sid>' og derpå kalde SQL*PLUS
eller
2. angive navn på Service i SQL*Plus-kald: 'sqlplus system/manager@tnsname @danXML.sql'
Du kan finde SID ved at gå ind i Tjenester (services) og finde tjenesten OracleService<sid> (den skal jo så også lige være startet).
Du kan finde tnsname ved at finde %ORACLE_HOME%\network\admin\tnsnames.ora-filen og finde den entry, der matcher din SID.
Du kan checke om der er hul igennem ved at køre 'tnsping'
Har fornyligt gået fra version 8 til 9 - og den sammenhæng skiftede vi også navnet på SID... det havde jeg bare glemt :)
Alt ser ud til at køre perfekt nu - så du har gjort alt hvad der er svaret på og lidt til og det er jo dejligt :)
Der er dog lang vej endnu, for dette var en simpel XML og derudover er der problemer med en for lang "nedetid" idet en gammel XML-fil overskrives med nye data etc... men dem må jeg tage hen ad vejen. Du skal i hvert fald have stor tak!
jeg lægger lige lidt ekstra point i inden jeg lukker...
og med det samme en sidste ting;
Når jeg henter data ud fra et varchar2 felt så kan den maks skrive 80 tegn pr. linie i XML-filen. Er der så flere tegn i mit varchar2-felt deler den teksten op i flere linier og det gør, at når jeg kigger på xml-filen så laver den et ekstra mellem der hvor der er linieskift og de ekstra linieskift kan være midt inde i et ord og det ser jo ikke så godt ud...
Kan man på nogen måde sætte en ubegrænset længde på linierne?
Jeg er vanvittig glad for din hjælp - håber du kan stå til rådighed hvis jeg senere støder ind i problemer vedrørende Oracle/SQLplus :oD
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.