new name
asked on
Postgres - Stored procedure XML conversion
I am trying to convert a SQL Server stored procedure to Post gres procedure but stuck up in the XML portion. Need help in converting this XML piece of code to post gres code.
EXEC sp_xml_preparedocument @idoc OUTPUT, @ROLES;
UPDATE SSO_XREF_USER_ROLE SET ACTV_IND=1 WHERE
(CONVERT(VARCHAR,SSO_USER_ ID)+CONVER T(VARCHAR, SSO_ROLE_I D)) IN
(SELECT CONVERT(VARCHAR,X.SSO_USER _ID)+CONVE RT(VARCHAR ,X.SSO_ROL E_ID) FROM
(SELECT XUR.SSO_USER_ID,SR.SSO_ROL E_ID FROM SSO_XREF_USER_ROLE XUR
JOIN SSO_ROLE SR ON XUR.SSO_ROLE_ID=SR.SSO_ROL E_ID WHERE
SR.SSO_ROLE_NM IN
(SELECT RoleName FROM
OPENXML(@idoc, '/DocumentElement/UpdateRo les', 2)
WITH (RoleName varchar(100),
RoleStatus numeric(1,0))
WHERE RoleStatus=1))AS X)
Not sure what is the equivalent of sp_xml_preparedocument in Postgres procedure
EXEC sp_xml_preparedocument @idoc OUTPUT, @ROLES;
UPDATE SSO_XREF_USER_ROLE SET ACTV_IND=1 WHERE
(CONVERT(VARCHAR,SSO_USER_
(SELECT CONVERT(VARCHAR,X.SSO_USER
(SELECT XUR.SSO_USER_ID,SR.SSO_ROL
JOIN SSO_ROLE SR ON XUR.SSO_ROLE_ID=SR.SSO_ROL
SR.SSO_ROLE_NM IN
(SELECT RoleName FROM
OPENXML(@idoc, '/DocumentElement/UpdateRo
WITH (RoleName varchar(100),
RoleStatus numeric(1,0))
WHERE RoleStatus=1))AS X)
Not sure what is the equivalent of sp_xml_preparedocument in Postgres procedure
can you provide your input data and expected output. These functions are not available in postgresql.
ASKER
This is the SQL server procedure i am trying to convert. Depending on the @GETBY values, i am taking certain action
CREATE PROCEDURE [dbo].[usp_SSOUser]
@GETBY VARCHAR(30) = NULL,
@EID VARCHAR(30) = NULL,
@FRST_NM VARCHAR(255) = NULL,
@LAST_NM VARCHAR(255) = NULL,
@MOD_NM VARCHAR(30) = NULL,
@SSO_USER_ID NUMERIC(12,0) = NULL,
@CRET_NM VARCHAR(30) = NULL,
@CRET_TS DATETIME = NULL,
@ACTV_IND NUMERIC(1,0) = NULL,
@ROLES XML = NULL
AS
SET NOCOUNT ON;
BEGIN TRANSACTION
BEGIN TRY
IF(UPPER(@GETBY)='GETUSERS ')
BEGIN
SELECT SU.SSO_USER_ID AS User_ID, SU.ACTV_IND AS Active,
LTRIM(SU.LAST_NM) +', '+ ltrim(SU.FRST_NM) AS Name,
UPPER(ltrim(SU.EID)) AS EnterpriseID
FROM SSO_USER SU
ORDER BY SU.ACTV_IND DESC, upper(SU.LAST_NM)
END
ELSE IF(UPPER(@GETBY)='GETROLES ')
BEGIN
SELECT SSO_ROLE_NM, SSO_ROLE_ID
FROM SSO_ROLE WHERE ACTV_IND = 1
END
ELSE IF(UPPER(@GETBY)='GETXREF' )
BEGIN
SELECT XUR.SSO_USER_ID,XUR.SSO_RO LE_ID,SR.S SO_ROLE_NM
FROM SSO_XREF_USER_ROLE XUR,SSO_ROLE SR
WHERE XUR.SSO_ROLE_ID = SR.SSO_ROLE_ID AND
XUR.ACTV_IND = 1 AND SR.ACTV_IND = 1
END
ELSE IF(UPPER(@GETBY)='DUPLICAT ECHECK')
BEGIN
SELECT count(*) FROM SSO_USER WHERE EID= @EID
END
ELSE IF(UPPER(@GETBY)='UPDUSER' )
BEGIN
update SSO_USER set EID = @EID, FRST_NM = @FRST_NM,
LAST_NM = @LAST_NM, MOD_NM = @MOD_NM
where SSO_USER_ID = @SSO_USER_ID
END
ELSE IF(UPPER(@GETBY)='INSUSER' )
BEGIN
INSERT INTO SSO_USER(EID, FRST_NM, LAST_NM, ACTV_IND, CRET_NM, MOD_NM,CRET_TS)
VALUES (@EID,@FRST_NM,@LAST_NM,1, @CRET_NM,@ MOD_NM,@CR ET_TS)
END
ELSE IF(UPPER(@GETBY)='ACTIVATE ')
BEGIN
UPDATE SSO_USER SET ACTV_IND = 1, MOD_NM = @CRET_NM
where SSO_USER_ID = @SSO_USER_ID
END
ELSE IF(UPPER(@GETBY)='DEACTIVA TE')
BEGIN
UPDATE SSO_USER SET ACTV_IND = 0, MOD_NM = @CRET_NM
where SSO_USER_ID = @SSO_USER_ID
END
ELSE IF(UPPER(@GETBY)='UPDATERO LEACCESS')
BEGIN
DECLARE @idoc int;
EXEC sp_xml_preparedocument @idoc OUTPUT, @ROLES;
UPDATE SSO_XREF_USER_ROLE SET ACTV_IND=1 WHERE
(CONVERT(VARCHAR,SSO_USER_ ID)+CONVER T(VARCHAR, SSO_ROLE_I D)) IN
(SELECT CONVERT(VARCHAR,X.SSO_USER _ID)+CONVE RT(VARCHAR ,X.SSO_ROL E_ID) FROM
(SELECT XUR.SSO_USER_ID,SR.SSO_ROL E_ID FROM SSO_XREF_USER_ROLE XUR
JOIN SSO_ROLE SR ON XUR.SSO_ROLE_ID=SR.SSO_ROL E_ID WHERE
SR.SSO_ROLE_NM IN
(SELECT RoleName FROM
OPENXML(@idoc, '/DocumentElement/UpdateRo les', 2)
WITH (RoleName varchar(100),
RoleStatus numeric(1,0))
WHERE RoleStatus=1))AS X)
UPDATE SSO_XREF_USER_ROLE SET ACTV_IND=0 WHERE
(CONVERT(VARCHAR,SSO_USER_ ID)+CONVER T(VARCHAR, SSO_ROLE_I D)) IN
(SELECT CONVERT(VARCHAR,X.SSO_USER _ID)+CONVE RT(VARCHAR ,X.SSO_ROL E_ID) FROM
(SELECT XUR.SSO_USER_ID,SR.SSO_ROL E_ID FROM SSO_XREF_USER_ROLE XUR
JOIN SSO_ROLE SR ON XUR.SSO_ROLE_ID=SR.SSO_ROL E_ID WHERE
SR.SSO_ROLE_NM IN
(SELECT RoleName FROM
OPENXML(@idoc, '/DocumentElement/UpdateRo les', 2)
WITH (RoleName varchar(100),
RoleStatus numeric(1,0))
WHERE RoleStatus=0))AS X)
INSERT INTO SSO_XREF_USER_ROLE(SSO_USE R_ID,SSO_R OLE_ID,ACT V_IND,CRET _NM,CRET_T S)
SELECT X.SSO_USER_ID,X.SSO_ROLE_I D,1,@CRET_ NM,GETDATE () FROM
(SELECT XUR.SSO_USER_ID,SR.SSO_ROL E_ID FROM SSO_XREF_USER_ROLE XUR
JOIN SSO_ROLE SR ON XUR.SSO_ROLE_ID=SR.SSO_ROL E_ID WHERE
SR.SSO_ROLE_NM IN
(SELECT RoleName FROM
OPENXML(@idoc, '/DocumentElement/UpdateRo les', 2)
WITH (RoleName varchar(100),
RoleStatus numeric(1,0))
))AS X
WHERE CONVERT(VARCHAR,X.SSO_USER _ID)+CONVE RT(VARCHAR ,X.SSO_ROL E_ID) NOT IN
(SELECT CONVERT(VARCHAR,SSO_USER_I D)+CONVERT (VARCHAR,S SO_ROLE_ID )
FROM SSO_XREF_USER_ROLE WHERE ACTV_IND=1)
END
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH
IF @@TRANCOUNT > 0
COMMIT;
CREATE PROCEDURE [dbo].[usp_SSOUser]
@GETBY VARCHAR(30) = NULL,
@EID VARCHAR(30) = NULL,
@FRST_NM VARCHAR(255) = NULL,
@LAST_NM VARCHAR(255) = NULL,
@MOD_NM VARCHAR(30) = NULL,
@SSO_USER_ID NUMERIC(12,0) = NULL,
@CRET_NM VARCHAR(30) = NULL,
@CRET_TS DATETIME = NULL,
@ACTV_IND NUMERIC(1,0) = NULL,
@ROLES XML = NULL
AS
SET NOCOUNT ON;
BEGIN TRANSACTION
BEGIN TRY
IF(UPPER(@GETBY)='GETUSERS
BEGIN
SELECT SU.SSO_USER_ID AS User_ID, SU.ACTV_IND AS Active,
LTRIM(SU.LAST_NM) +', '+ ltrim(SU.FRST_NM) AS Name,
UPPER(ltrim(SU.EID)) AS EnterpriseID
FROM SSO_USER SU
ORDER BY SU.ACTV_IND DESC, upper(SU.LAST_NM)
END
ELSE IF(UPPER(@GETBY)='GETROLES
BEGIN
SELECT SSO_ROLE_NM, SSO_ROLE_ID
FROM SSO_ROLE WHERE ACTV_IND = 1
END
ELSE IF(UPPER(@GETBY)='GETXREF'
BEGIN
SELECT XUR.SSO_USER_ID,XUR.SSO_RO
FROM SSO_XREF_USER_ROLE XUR,SSO_ROLE SR
WHERE XUR.SSO_ROLE_ID = SR.SSO_ROLE_ID AND
XUR.ACTV_IND = 1 AND SR.ACTV_IND = 1
END
ELSE IF(UPPER(@GETBY)='DUPLICAT
BEGIN
SELECT count(*) FROM SSO_USER WHERE EID= @EID
END
ELSE IF(UPPER(@GETBY)='UPDUSER'
BEGIN
update SSO_USER set EID = @EID, FRST_NM = @FRST_NM,
LAST_NM = @LAST_NM, MOD_NM = @MOD_NM
where SSO_USER_ID = @SSO_USER_ID
END
ELSE IF(UPPER(@GETBY)='INSUSER'
BEGIN
INSERT INTO SSO_USER(EID, FRST_NM, LAST_NM, ACTV_IND, CRET_NM, MOD_NM,CRET_TS)
VALUES (@EID,@FRST_NM,@LAST_NM,1,
END
ELSE IF(UPPER(@GETBY)='ACTIVATE
BEGIN
UPDATE SSO_USER SET ACTV_IND = 1, MOD_NM = @CRET_NM
where SSO_USER_ID = @SSO_USER_ID
END
ELSE IF(UPPER(@GETBY)='DEACTIVA
BEGIN
UPDATE SSO_USER SET ACTV_IND = 0, MOD_NM = @CRET_NM
where SSO_USER_ID = @SSO_USER_ID
END
ELSE IF(UPPER(@GETBY)='UPDATERO
BEGIN
DECLARE @idoc int;
EXEC sp_xml_preparedocument @idoc OUTPUT, @ROLES;
UPDATE SSO_XREF_USER_ROLE SET ACTV_IND=1 WHERE
(CONVERT(VARCHAR,SSO_USER_
(SELECT CONVERT(VARCHAR,X.SSO_USER
(SELECT XUR.SSO_USER_ID,SR.SSO_ROL
JOIN SSO_ROLE SR ON XUR.SSO_ROLE_ID=SR.SSO_ROL
SR.SSO_ROLE_NM IN
(SELECT RoleName FROM
OPENXML(@idoc, '/DocumentElement/UpdateRo
WITH (RoleName varchar(100),
RoleStatus numeric(1,0))
WHERE RoleStatus=1))AS X)
UPDATE SSO_XREF_USER_ROLE SET ACTV_IND=0 WHERE
(CONVERT(VARCHAR,SSO_USER_
(SELECT CONVERT(VARCHAR,X.SSO_USER
(SELECT XUR.SSO_USER_ID,SR.SSO_ROL
JOIN SSO_ROLE SR ON XUR.SSO_ROLE_ID=SR.SSO_ROL
SR.SSO_ROLE_NM IN
(SELECT RoleName FROM
OPENXML(@idoc, '/DocumentElement/UpdateRo
WITH (RoleName varchar(100),
RoleStatus numeric(1,0))
WHERE RoleStatus=0))AS X)
INSERT INTO SSO_XREF_USER_ROLE(SSO_USE
SELECT X.SSO_USER_ID,X.SSO_ROLE_I
(SELECT XUR.SSO_USER_ID,SR.SSO_ROL
JOIN SSO_ROLE SR ON XUR.SSO_ROLE_ID=SR.SSO_ROL
SR.SSO_ROLE_NM IN
(SELECT RoleName FROM
OPENXML(@idoc, '/DocumentElement/UpdateRo
WITH (RoleName varchar(100),
RoleStatus numeric(1,0))
))AS X
WHERE CONVERT(VARCHAR,X.SSO_USER
(SELECT CONVERT(VARCHAR,SSO_USER_I
FROM SSO_XREF_USER_ROLE WHERE ACTV_IND=1)
END
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH
IF @@TRANCOUNT > 0
COMMIT;
ASKER
Have not received any update this? What is the equivalent for this code in Post gres for SP_XML_PREPAREDOCUMENT and also for openxml
EXEC sp_xml_preparedocument @idoc OUTPUT, @ROLES;
UPDATE SSO_XREF_USER_ROLE SET ACTV_IND=1 WHERE
(CONVERT(VARCHAR,SSO_USER_ ID)+CONVER T(VARCHAR, SSO_ROLE_I D)) IN
(SELECT CONVERT(VARCHAR,X.SSO_USER _ID)+CONVE RT(VARCHAR ,X.SSO_ROL E_ID) FROM
(SELECT XUR.SSO_USER_ID,SR.SSO_ROL E_ID FROM SSO_XREF_USER_ROLE XUR
JOIN SSO_ROLE SR ON XUR.SSO_ROLE_ID=SR.SSO_ROL E_ID WHERE
SR.SSO_ROLE_NM IN
(SELECT RoleName FROM
OPENXML(@idoc, '/DocumentElement/UpdateRo les', 2)
WITH (RoleName varchar(100),
RoleStatus numeric(1,0))
WHERE RoleStatus=1))AS X)
EXEC sp_xml_preparedocument @idoc OUTPUT, @ROLES;
UPDATE SSO_XREF_USER_ROLE SET ACTV_IND=1 WHERE
(CONVERT(VARCHAR,SSO_USER_
(SELECT CONVERT(VARCHAR,X.SSO_USER
(SELECT XUR.SSO_USER_ID,SR.SSO_ROL
JOIN SSO_ROLE SR ON XUR.SSO_ROLE_ID=SR.SSO_ROL
SR.SSO_ROLE_NM IN
(SELECT RoleName FROM
OPENXML(@idoc, '/DocumentElement/UpdateRo
WITH (RoleName varchar(100),
RoleStatus numeric(1,0))
WHERE RoleStatus=1))AS X)
This ( SP_XML_PREPAREDOCUMENT ) is not available in Postgre SQL
Is PostgreSQL we can use xpath and Unnest for XML parsing and data extraction.
Please go through the XML documentation from postgreSQL site
https://www.postgresql.org/docs/9.1/static/functions-xml.html
Is PostgreSQL we can use xpath and Unnest for XML parsing and data extraction.
Please go through the XML documentation from postgreSQL site
https://www.postgresql.org/docs/9.1/static/functions-xml.html
ASKER
Appreciate if i can get the exact replacement for these SQLServer in PostgresSQL
EXEC sp_xml_preparedocument @idoc OUTPUT, @ROLES;
OPENXML(@idoc, '/DocumentElement/UpdateRo les', 2)
WITH (RoleName varchar(100),
RoleStatus numeric(1,0))
WHERE RoleStatus=1))AS X)
EXEC sp_xml_preparedocument @idoc OUTPUT, @ROLES;
OPENXML(@idoc, '/DocumentElement/UpdateRo
WITH (RoleName varchar(100),
RoleStatus numeric(1,0))
WHERE RoleStatus=1))AS X)
This question needs an answer!
Become an EE member today
7 DAY FREE TRIALMembers can start a 7-Day Free trial then enjoy unlimited access to the platform.
View membership options
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.