PostgreSQL - PostgreSql y XML

 
Vista:
sin imagen de perfil

PostgreSql y XML

Publicado por Mauricio (2 intervenciones) el 29/09/2014 19:03:46
Buen día.

Estoy empezando con PostgreSql, tengo instalada la versión 9.3.5, compiled by Visual C++ build 1600, 32-bit, sobre W7

Necesito hacer una función que reciba varios parámetros, entre ellos un xml.

Conozco Sql Server, voy a transcribir un pequeño ejemplo donde preguntare las equivalencias de postgreSql, espero contar con su ayuda.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Create Procedure [Cnt].[Asiento_spI] @tiMovTipId Int, @tdFecha Date, @cNota nVarchar(100), @Detalle xml, @iKeyId Int = null Out
As
Set Nocount On
 
Begin Try
/*Existe variables tipo tabla?
Necesito trabajar con estas variables o algo parecido, realizo varios procesos con esta data.
 */
 Declare @tDetalle Table (ictaid Int, ndebe Decimal(18,2), nHaber Decimal(18,2), cNota nVarChar(70))
 
/*inserto los registros almacenados en el Xml en la variable tipo table*/
 Insert Into @tDetalle
 SELECT
		p.x.value('(ictaid/text())[1]', 'int') AS iCtaId,
		p.x.value('(ndebe/text())[1]',  'Decimal (18,2)') AS nDebe,
		p.x.value('(nhaber/text())[1]', 'Decimal (18,2)') AS nHaber,
		p.x.value('(cnota/text())[1]',  'nvarchar(70)') AS cNota
  FROM
		@Detalle.nodes('/VFPData/rs') AS P(x)
 
 Declare @iNumero Int
 
 Begin Transaction
       --Estoy llamando a un sp que trabaja con un objeto sequense, muy similar a postgreSql no tengo problema
	Exec Cnt.AsiCabIdDispenser_spU @iKeyNext = @iKeyId Out ;
 
	--Numero de transacción
	Exec App.MTYSec_spUI @tiMovTipId, @iKeyNext = @iNumero Out
 
	INSERT INTO Cnt.AsiCab
	(iAsiCId, iMovTipId, iNumero, cNota, dFecha)
	VALUES
	(@iKeyId, @tiMovTipId, @iNumero, @cNota, @tdFecha);
 
	Insert Into Cnt.AsiDet
	(iAsiCId, iCtaId, nDebe, nHaber, cNota)
	SELECT
	     @iKeyId, ictaid, ndebe, nhaber, cnota
	FROM
	@tDetalle;
 
       -- Este Update no va, pero es un ejemplo de porque necesito almacenar la data a una variable de este tipo.
        Update Cnt.Saldos
          Set nsaldo = nsaldo + d.debe
            From cnt.Saldos s Inner Join @tDetalle d on s.ictaid = d.ictaid;
 
 Commit Transaction
End try
 
Begin Catch
 if @@TRANCOUNT > 0
    Rollback Transaction;
 Throw;
 end Catch


Estoy trabajado con Sql Manager y cuando declaro una variable tipo xml en el Editor Sql me marca este error.

ERROR: error de sintaxis en o cerca de «XML»
LINE 1: Declare cxml XML;

Este es el código

Declare cxml XML;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cxml = '<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<VFPData>
	<rs>
		<ictaid>12</ictaid>
		<ndebe>12.00</ndebe>
		<nhaber>0</nhaber>
		<cnota>pago</cnota>
	</rs>
	<rs>
		<ictaid>345</ictaid>
		<ndebe>0</ndebe>
		<nhaber>10.00</nhaber>
		<cnota/>
	</rs>
</VFPData>';

Como declara una variable tipo xml?, lo necesito para hacer pruebas.
Hay algo de especial para llamar a una función que reciba una variable xml?

Busque información en la web pero no encuentro algo que me diga que se puede trabajar de esta manera en PostgreSql, como puedo hacerlo?

Pueden recomendar algún link en español donde pueda ver ejemplos?

Saludos.
Mauricio
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder