如何在 postgresql 函数中从 xml 读取数据?

How to read data from xml in postgresql function?

如何读取postgresql中存储的xml数据procedure.and如何通过xml发送数据并调用java中的存储过程。

我可以通过 sqlserver 读取 xml 数据,但我在 postgres 存储过程中使用同样的东西,比如

insert into temp_StudentDetails (studentId, studentFirstName, studentMiddleName, studentLastName, dateOfBirth, emailId, mobileNumber, landlineNumber, courseId, yearId, cityIdPass, stateIdPass, addressId)
    SELECT 
        Tab.Col.value('(studentId)[1]', 'bigint' ),
        Tab.Col.value('(studentFirstName)[1]', 'character varying(50)'),
        Tab.Col.value('(studentMiddleName)[1]', 'character varying(50)'),
        Tab.Col.value('(studentLastName)[1]', 'character varying(50)'),
        Tab.Col.value('(dateOfBirth)[1]', 'date'),
        Tab.Col.value('(emailId)[1]', 'character varying(50)'),
        Tab.Col.value('(mobileNumber)[1]', 'character varying(50)'),
        Tab.Col.value('(landlineNumber)[1]', 'character varying(50)'),
        Tab.Col.value('(courseId)[1]', 'BIGINT'),
        Tab.Col.value('(yearId)[1]', 'BIGINT'),
        Tab.Col.value('(cityIdPass)[1]', 'BIGINT'),
        Tab.Col.value('(stateIdPass)[1]', 'BIGINT'),
        Tab.Col.value('(addressId)[1]', 'BIGINT')

        from p_studentDetailsXML.nodes('/Root/StudentDetails') Tab(Col);

以及如何使其在 postgresql 函数中工作?

有什么帮助吗?

Postgres 为写入和读取 xml 数据提供了良好的支持。有关详细信息,请参阅文档: www.postgresql.org/docs/current/static/functions-xml.html

扩展 xml2 提供额外的 xml 功能: http://www.postgresql.org/docs/current/static/xml2.html。 使用

创建扩展
CREATE EXTENSION xml2;

如a_horse_with_no_name所说,您可能需要 xpath 或 xpath_table 函数。这里有一个简单的存储过程示例,基于您使用 xpath 函数的数据:

CREATE OR REPLACE FUNCTION insert_student(input_xml xml) RETURNS VOID AS
  $$
  DECLARE root_xpath TEXT = '/Root/StudentDetails/';
  BEGIN
    INSERT INTO temp_StudentDetails (studentId, studentFirstName)
    SELECT ((xpath(root_xpath|| 'StudentId/text()', input_xml))[1])::text::int,
          (xpath(root_xpath|| 'studentFirstName/text()', input_xml))[1];                
    RETURN;
  END;
  $$
LANGUAGE plpgsql;

所以你可以调用函数:

SELECT insert_student('
<Root><StudentDetails>
  <StudentId>10</StudentId>
  <studentFirstName>John</studentFirstName>
</StudentDetails></Root>');