2017-03-03 21:04 GMT+01:00 Alvaro Herrera <alvhe...@2ndquadrant.com>:

> Pavel Stehule wrote:
> > 2017-03-03 19:15 GMT+01:00 Alvaro Herrera <alvhe...@2ndquadrant.com>:
>
> > > 2. As I've complained many times, I find the way we manage an empty
> > > COLUMNS clause pretty bad.  The standard doesn't require that syntax
> > > (COLUMNS is required), and I don't like the implementation, so why not
> > > provide the feature in a different way?  My proposal is to change the
> > > column options in gram.y to be something like this:
> >
> > The clause COLUMNS is optional on Oracle and DB2
> >
> > So I prefer a Oracle, DB2 design. If you are strongly against it, then we
> > can remove it to be ANSI/SQL only.
> >
> > I am don't see an good idea to introduce third syntax.
>
> OK.  I think trying to be syntax compatible with DB2 or Oracle is a lost
> cause, because the syntax used in the XPath expressions seems different
> -- I think Oracle uses XQuery (which we don't support) and DB2 uses ...
> not sure what it is, but it doesn't work in our implementation
> (stuff like '$d/employees/emp' in the row expression.)
>

100% compatibility is not possible - but XPath is subset of XQuery and in
reality - the full XQuery examples of XMLTABLE is not often.

Almost all examples of usage XMLTABLE, what I found in blogs, uses XPath
only


>
> In existing applications using those Oracle/DB2, is it common to omit
> the COLUMNS clause?  I searched for "xmltable oracle" and had a look at
> the first few hits outside of the oracle docs:
> http://viralpatel.net/blogs/oracle-xmltable-tutorial/
> http://www.dba-oracle.com/t_xmltable.htm
> http://stackoverflow.com/questions/12690868/how-to-use-xmltable-in-oracle
> https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:
> 9533111800346252295
> http://stackoverflow.com/questions/1222570/what-is-an-xmltable
> https://community.oracle.com/thread/3955198
>
> Not a single one of these omit the COLUMNS clause (though the second one
> mentions that the clause can be omitted).
>
> I also looked at a few samples with DB2 -- same thing; it is possible,
> but is it common?
>

I don't think so it is common - it is corner case - and I can live without
it well


>
> Anyway, I noticed that "xml PATH '.'" can be used to obtain the full XML
> of the row, which I think is the feature I wanted, so I think we're
> covered and we can omit the case with no COLUMNS, since we already have
> the feature in another way.  No need to implement anything further, and
> we can rip out the special case I don't like.  Example:
>

yes,


>
> CREATE TABLE EMPLOYEES
> (
>        id     integer,
>        data   XML
> );
> INSERT INTO EMPLOYEES
>      VALUES (1, '<Employees>
>     <Employee emplid="1111" type="admin">
>         <firstname>John</firstname>
>         <lastname>Watson</lastname>
>         <age>30</age>
>         <email>johnwat...@sh.com</email>
>     </Employee>
>     <Employee emplid="2222" type="admin">
>         <firstname>Sherlock</firstname>
>         <lastname>Homes</lastname>
>         <age>32</age>
>         <email>sherl...@sh.com</email>
>     </Employee>
>     <Employee emplid="3333" type="user">
>         <firstname>Jim</firstname>
>         <lastname>Moriarty</lastname>
>         <age>52</age>
>         <email>j...@sh.com</email>
>     </Employee>
>     <Employee emplid="4444" type="user">
>         <firstname>Mycroft</firstname>
>         <lastname>Holmes</lastname>
>         <age>41</age>
>         <email>mycr...@sh.com</email>
>     </Employee>
> </Employees>');
>
> This is with COLUMNS omitted:
>
> alvherre=# select xmltable.* from employees,
> xmltable('/Employees/Employee' passing data);
>                  xmltable
> ──────────────────────────────────────────
>  <Employee emplid="1111" type="admin">   ↵
>          <firstname>John</firstname>     ↵
>          <lastname>Watson</lastname>     ↵
>          <age>30</age>                   ↵
>          <email>johnwat...@sh.com</email>↵
>      </Employee>
>  <Employee emplid="2222" type="admin">   ↵
>          <firstname>Sherlock</firstname> ↵
>          <lastname>Homes</lastname>      ↵
>          <age>32</age>                   ↵
>          <email>sherl...@sh.com</email>  ↵
>      </Employee>
>  <Employee emplid="3333" type="user">    ↵
>          <firstname>Jim</firstname>      ↵
>          <lastname>Moriarty</lastname>   ↵
>          <age>52</age>                   ↵
>          <email>j...@sh.com</email>       ↵
>      </Employee>
>  <Employee emplid="4444" type="user">    ↵
>          <firstname>Mycroft</firstname>  ↵
>          <lastname>Holmes</lastname>     ↵
>          <age>41</age>                   ↵
>          <email>mycr...@sh.com</email>   ↵
>      </Employee>
>
> and this is what you get with "xml PATH '.'" (I threw in ORDINALITY just
> for fun):
>
> alvherre=# select xmltable.* from employees,
> xmltable('/Employees/Employee' passing data columns row_number for
> ordinality, emp xml path '.');
>  row_number │                   emp
> ────────────┼──────────────────────────────────────────
>           1 │ <Employee emplid="1111" type="admin">   ↵
>             │         <firstname>John</firstname>     ↵
>             │         <lastname>Watson</lastname>     ↵
>             │         <age>30</age>                   ↵
>             │         <email>johnwat...@sh.com</email>↵
>             │     </Employee>
>           2 │ <Employee emplid="2222" type="admin">   ↵
>             │         <firstname>Sherlock</firstname> ↵
>             │         <lastname>Homes</lastname>      ↵
>             │         <age>32</age>                   ↵
>             │         <email>sherl...@sh.com</email>  ↵
>             │     </Employee>
>           3 │ <Employee emplid="3333" type="user">    ↵
>             │         <firstname>Jim</firstname>      ↵
>             │         <lastname>Moriarty</lastname>   ↵
>             │         <age>52</age>                   ↵
>             │         <email>j...@sh.com</email>       ↵
>             │     </Employee>
>           4 │ <Employee emplid="4444" type="user">    ↵
>             │         <firstname>Mycroft</firstname>  ↵
>             │         <lastname>Holmes</lastname>     ↵
>             │         <age>41</age>                   ↵
>             │         <email>mycr...@sh.com</email>   ↵
>             │     </Employee>
>
> --
> Álvaro Herrera                https://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
>

Reply via email to