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:
create table cikk
   (azon		NUMBER primary key,
    cim		VARCHAR2(100),
    szerzo		VARCHAR2(100),
    szoveg		CLOB,
    datum		DATE, 
    cikk_xml	XMLTYPE);


CREATE OR REPLACE Procedure generate_xml(p_azon number)
 IS
	l_cikk_xml	CLOB;
BEGIN
SELECT ( XMLElement ( "cikk" , XMLAttributes( azon as "azon")
		 	, XMLElement( "cim", cim)
		 	, XMLElement( "szerzo", szerzo)
 	, XMLElement( "datum", to_char(datum, 'YYYY.MM.DD'))
		 	, XMLElement( "szoveg", szoveg))
  ).getClobVal()
	  INTO l_cikk_xml
	  FROM cikkek
	 WHERE azon = p_azon;

	UPDATE cikkek set cikk_xml = XMLType(l_cikk_xml)
	 WHERE azon = p_azon;

	commit;
END;
És ez lenne az amivel átpakolnám a cuccot:
CREATE OR REPLACE DIRECTORY ARTICLE_DIR AS 'e:\';
declare
	f bfile;
    l_textclob		clob;
    ln_warning		number;

    ln_destoffs		number :=1;
    ln_srcoffs		number :=1;
	ln_langctxt		number :=0;
	ls_filename		varchar2(240) := 'e:\x.xml';

    amt			number;
begin
	f:= BFILENAME('ARTICLE_DIR', 'x.xml');
	dbms_output.put_line('Filename: ' || ls_filename);
   	dbms_lob.fileopen(f, dbms_lob.file_readonly);
	amt := dbms_lob.getlength(f);

	IF amt != 0 then

			dbms_output.put_line('Loading ' || amt || ' bytes...');

			dbms_lob.createtemporary(l_textclob, TRUE);

			DBMS_LOB.LOADCLOBFROMFILE (
					dest_lob 		=> l_textclob,
					src_bfile		=> f,
					amount 			=> amt,
					dest_offset 	=> ln_destoffs,
					src_offset  	=> ln_srcoffs,
					bfile_csid		=> 0,
					lang_context 	=> ln_langctxt,
					warning 		=> ln_warning);

		dbms_output.put_line(dbms_lob.getlength(l_textclob) || ' bytes loaded.');

		insert into cikk (azon, cikk_xml)
		values ('6', XMLType(l_textclob));
	END IF;
	dbms_lob.freetemporary(l_textclob);
  	dbms_lob.fileclose(f);
exception
	when others then
		dbms_lob.freetemporary(l_textclob);
		dbms_lob.fileclose(f);
		raise;
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!