ugrás a tartalomhoz

XML adat betöltése Oracle adatbázisba SQL-lel

palko · 2005. Nov. 30. (Sze), 11.39
Helló!

Van egy gondom! Azt kellene megoldanom egy egyszerű sql skripttel hogy az adott xml fájl tartalmát beszúrjam az adatbázisba. Ha van valakinek valamilyen ötlete vagy megoldása az irjon már!
Előre is köszönöm a segítséget!
 
1

Milyen adatbázis?

Poetro · 2005. Nov. 30. (Sze), 12.04
MySQL 4+ -ban a LOAD_FILE(file_name) áll rendelkezésre.
Az elérhetőségérő lásd manual részlet:
Reads the file and returns the file contents as a string. The file must be on the server, you must specify the full pathname to the file, and you must have the FILE privilege. The file must be readable by all and be smaller than max_allowed_packet.

--------
Poetro
2

<Nincs cím>

palko · 2005. Nov. 30. (Sze), 12.32
Ez eddig ok!
De inkább kiteszem először azt a skriptet amivel a táblát csináltam és aztán azt amivel beraknám az xml tartalmát az ab-be!
Ez a tábla készítése:
  1. create table cikk  
  2.    (azon        NUMBER primary key,  
  3.     cim     VARCHAR2(100),  
  4.     szerzo      VARCHAR2(100),  
  5.     szoveg      CLOB,  
  6.     datum       DATE,   
  7.     cikk_xml    XMLTYPE);  
  8.   
  9.   
  10. CREATE OR REPLACE Procedure generate_xml(p_azon number)  
  11.  IS  
  12.     l_cikk_xml  CLOB;  
  13. BEGIN  
  14. SELECT ( XMLElement ( "cikk" , XMLAttributes( azon as "azon")  
  15.             , XMLElement( "cim", cim)  
  16.             , XMLElement( "szerzo", szerzo)  
  17.     , XMLElement( "datum", to_char(datum, 'YYYY.MM.DD'))  
  18.             , XMLElement( "szoveg", szoveg))  
  19.   ).getClobVal()  
  20.       INTO l_cikk_xml  
  21.       FROM cikkek  
  22.      WHERE azon = p_azon;  
  23.   
  24.     UPDATE cikkek set cikk_xml = XMLType(l_cikk_xml)  
  25.      WHERE azon = p_azon;  
  26.   
  27.     commit;  
  28. END;  
És ez lenne az amivel átpakolnám a cuccot:
  1. CREATE OR REPLACE DIRECTORY ARTICLE_DIR AS 'e:\';  
  2. declare  
  3.     f bfile;  
  4.     l_textclob      clob;  
  5.     ln_warning      number;  
  6.   
  7.     ln_destoffs     number :=1;  
  8.     ln_srcoffs      number :=1;  
  9.     ln_langctxt     number :=0;  
  10.     ls_filename     varchar2(240) := 'e:\x.xml';  
  11.   
  12.     amt         number;  
  13. begin  
  14.     f:= BFILENAME('ARTICLE_DIR''x.xml');  
  15.     dbms_output.put_line('Filename: ' || ls_filename);  
  16.     dbms_lob.fileopen(f, dbms_lob.file_readonly);  
  17.     amt := dbms_lob.getlength(f);  
  18.   
  19.     IF amt != 0 then  
  20.   
  21.             dbms_output.put_line('Loading ' || amt || ' bytes...');  
  22.   
  23.             dbms_lob.createtemporary(l_textclob, TRUE);  
  24.   
  25.             DBMS_LOB.LOADCLOBFROMFILE (  
  26.                     dest_lob        => l_textclob,  
  27.                     src_bfile       => f,  
  28.                     amount          => amt,  
  29.                     dest_offset     => ln_destoffs,  
  30.                     src_offset      => ln_srcoffs,  
  31.                     bfile_csid      => 0,  
  32.                     lang_context    => ln_langctxt,  
  33.                     warning         => ln_warning);  
  34.   
  35.         dbms_output.put_line(dbms_lob.getlength(l_textclob) || ' bytes loaded.');  
  36.   
  37.         insert into cikk (azon, cikk_xml)  
  38.         values ('6', XMLType(l_textclob));  
  39.     END IF;  
  40.     dbms_lob.freetemporary(l_textclob);  
  41.     dbms_lob.fileclose(f);  
  42. exception  
  43.     when others then  
  44.         dbms_lob.freetemporary(l_textclob);  
  45.         dbms_lob.fileclose(f);  
  46.         raise;  
  47. end;  
Igaz ebben csak két mező van amit át akarok rakni de ez még csak teszteléshez van. ha tud valaki ezek alapján segíteni annak köszönöm!