• Home
  • Backen
    • Rezepte für Gebäck, Kuchen etc.
    • Rezepte für Brote/Brötchen mit Übernachtgare
    • Rezepte für Brote/Brötchen ab 2 Tagen
    • Rezepte für Brote/Brötchen am gleichen Tag
  • Programming
    • Windows
      • Excel
      • Outlook
    • Unix
      • Unix Shell Commands
    • SQL
      • Oracle
    • Powershell
  • Kajak
  • Impressum

Oracle

PL SQL: Generate XML from select using XSLT

SET SERVEROUTPUT ON

DECLARE
ctxh dbms_xmlgen.ctxhandle;
result CLOB;

xmlinput XMLTYPE;
xslt XMLTYPE;
xmlfinal XMLTYPE;

sqlstmt varchar2(5024) := 'select 12345 as "usernr", ''myrolename'' as "role" from dual';

BEGIN
ctxh:= dbms_xmlgen.newcontext(sqlstmt);
DBMS_XMLGEN.setRowSetTag(ctxh, 'myresult');
DBMS_XMLGEN.setRowTag(ctxh, 'mytag');

result := dbms_xmlgen.getxml(ctxh);
xmlinput := XMLTYPE.CREATEXML(result);

xslt := XMLTYPE.CREATEXML('

');

SELECT XMLTRANSFORM(xmlinput, xslt)
INTO xmlfinal
FROM dual;

dbms_xmlgen.closecontext(ctxh);
DBMS_OUTPUT.PUT_LINE(xmlfinal.getstringval() );
END;

Recursive Select

select level,  LPAD(' ', 2 * level - 1) ||  orgunitname,
orgid, orgunits.parent_orgid
from orgunits
start with orgid = '50077170' -- this is the root of your conversation
connect by prior orgid=parent_orgid

SQL Function returning pipeline (Ruleengine)

create or replace function GET_ROLEFORUSER(in_roleid IN int, in_condition IN varchar2)

return TBL_ROLE2CTX PIPELINED AS

query varchar(2000);
TYPE DynCursor IS REF CURSOR;
result_cursor DynCursor;
res_id int;
res_roleid int;
res_ctxid int;
res_dateend date;
res_lastname varchar(100);
res_firstname varchar(100);

BEGIN

query := 'SELECT distinct r.id, r.roleid, r.ctxid, r.dateend, u.vorname as firstname, u.name as lastname
from role r
inner join user u
on u.usernr = r.usernr
where rc.roleid = :in_roleid and ' || in_condition;

OPEN result_cursor FOR query using in_roleid;

LOOP
FETCH result_cursor into res_id, res_roleid, res_ctxid, res_dateend, res_lastname, res_firstname;
exit when result_cursor%NOTFOUND;
PIPE ROW( REC_ROLE2CTX( res_id, res_roleid, res_ctxid, res_dateend, res_lastname,res_firstname) );
END LOOP;

close result_cursor;
return;

END GET_ROLEFORUSER;

  • Datenschutzerklärung
  • Impressum
Hestia | Entwickelt von ThemeIsle