ORACLE,forma melhor/mais rapida de gerar XML de uma query

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

ORACLE,forma melhor/mais rapida de gerar XML de uma query

Mensagempor Fenrir » Quinta Jan 10, 2008 10:11

Boas.

Alguem sabe qual a melhor forma de gerar XML a partir de um query SQL de ORACLE (melhor e mais rápida), seja um método interno ou externo.

A versão oracle é 9.2X
Cumps
Avatar do Utilizador
Fenrir
Membro de Prata
Membro de Prata
 
Mensagens: 354
Registado: Segunda Set 20, 2004 22:33
Localização: Porto

Mensagempor vamosAeles » Quinta Jan 10, 2008 19:41

humm, que queres dizer??
tens um campo CLOB ou XMLType e queres fazer uma query e criar um ficheiro .xml?
O que é suposto a query devolver (o 'xml' ou dados a serem tratados para popular o xml?

[[]]
vamosAeles
Membro de Prata
Membro de Prata
 
Mensagens: 206
Registado: Quarta Jan 04, 2006 21:29
Localização: Lisboa/Proença

Mensagempor Fenrir » Sexta Jan 11, 2008 10:31

vamosAeles Escreveu:humm, que queres dizer??
tens um campo CLOB ou XMLType e queres fazer uma query e criar um ficheiro .xml?
O que é suposto a query devolver (o 'xml' ou dados a serem tratados para popular o xml?

[[]]


Na altura que coloquei este POST ainda não tinha pesquisado devidamento.

O que eu quero é gerar um ficheiro xml completo a partir de uma query a uma tabela por exemplo

SELECT * FROM tabela (isto é um exemplo simples, mas até imagina diversas tabelas por join)

E a partir dessa query gerar um ficheiro xml complexo, com sub-nós, atributos, etc etc. Percebes?

Na minha pesquisa descubri que o Oracle 9i tem XML Nativo, que me dá hipotese de usar o DBMS_XMLGEN ou "XML SQL Utility (XSU)" . De momento ando a investigar o DBMS_XMLGEN porque me cria o ficheiro completo (estou a ver como alterar e adicionar atributos e outros elementos, ou seja personalizar).


Para o que eu quero não sei qual o método a utilizar se DBMS_XMLGEN ou "XML SQL Utility (XSU)" , ou outro método de bom performance que exista.

Se me conseguires arranjar exemplos, fico-te agradecido, ou indicar links
(fui ao forum da oracle, mas eles lá discutem só a nova versao pelos vistos o Oracle 11i)

[[]]
Avatar do Utilizador
Fenrir
Membro de Prata
Membro de Prata
 
Mensagens: 354
Registado: Segunda Set 20, 2004 22:33
Localização: Porto

Mensagempor vamosAeles » Sexta Jan 11, 2008 20:15

Oks, já tou ver.
Sinceramente tudo o que não seja de acesso a tabelas ou coisas simples, tento evitar efectuar em PL/SQL, pelo que nesses casos e já tive um caso semelhante ao teu, a diferença é qué ainda tinhas que 'trabalhar' os dados depois da query às tabelas. O que fiz foi um package (em java), carreguei-o na BD e depois executo um determinado método do package, como se de um procedimento de PL/SQL se tratasse.

Em relação a fazê-lo directamente em PL/SQL, não te consigo ajudar muito :(

Já agora de quantos registos essa query irá devolver (já com os joins, unions, etc)?

[[]]
vamosAeles
Membro de Prata
Membro de Prata
 
Mensagens: 206
Registado: Quarta Jan 04, 2006 21:29
Localização: Lisboa/Proença

Mensagempor Fenrir » Segunda Jan 14, 2008 9:50

Ainda não me foi revelada o formato da query, mas é esperado a devolução de milhares (ou mais) de registos.

Não posso usar java, pq a empresa não o suporta.

Utilizando user objects, e xmlgen que referi no outro post resolve o assunto. Agora em termos de performance não sei se é o melhor, mas como é xml nativo do oracle, acredito que não haja problemas.

deixo um exemplo como está no livro que estiver a ler.


Livro : http://www.lc.leidenuniv.nl/awcourse/or ... b12gen.htm

exemplo :

CREATE TABLE new_departments (
department_id NUMBER PRIMARY KEY,
department_name VARCHAR2(20)
);

CREATE TABLE new_employees (
employee_id NUMBER PRIMARY KEY,
last_name VARCHAR2(20),
department_id NUMBER REFERENCES new_departments
);

CREATE TYPE emp_t AS OBJECT(
"@employee_id" NUMBER,
last_name VARCHAR2(20)
);
/

CREATE TYPE emplist_t AS TABLE OF emp_t;
/

CREATE TYPE dept_t AS OBJECT(
"@department_id" NUMBER,
department_name VARCHAR2(20),
emplist emplist_t
);
/

qryCtx := dbms_xmlgen.newContext
('SELECT dept_t(department_id, department_name,
CAST(MULTISET
(SELECT e.employee_id, e.last_name
FROM new_employees e
WHERE e.department_id = d.department_id)
AS emplist_t)) AS deptxml
FROM new_departments d');
DBMS_XMLGEN.setRowTag(qryCtx, NULL);

-- Here is the resulting XML:
-- <ROWSET>
-- <DEPTXML DEPARTMENT_ID="10">
-- <DEPARTMENT_NAME>SALES</DEPARTMENT_NAME>
-- <EMPLIST>
-- <EMP_T EMPLOYEE_ID="30">
-- <LAST_NAME>Scott</LAST_NAME>
-- </EMP_T>
-- <EMP_T EMPLOYEE_ID="31">
-- <LAST_NAME>Mary</LAST_NAME>
-- </EMP_T>
-- </EMPLIST>
-- </DEPTXML>
-- <DEPTXML DEPARTMENT_ID="20">
-- ...
-- </ROWSET>






Obrigado pela tua participação,


espero que isto ajude quem precisa de trabalhar xml com oracle 9i


[[]]
Avatar do Utilizador
Fenrir
Membro de Prata
Membro de Prata
 
Mensagens: 354
Registado: Segunda Set 20, 2004 22:33
Localização: Porto


Voltar para Programação

Quem está ligado:

Utilizador a ver este Fórum: Nenhum utilizador registado e 1 visitante

cron