Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Mar 19th, 2010 | Syntax: None | Size: 3.06 KB | Hits: 74 | Expires: Never
Copy text to clipboard
  1. WITH object_types AS
  2.  (SELECT 1 id, NULL pid, '0' NAME FROM dual UNION ALL
  3.   SELECT 2 id, 1 pid, '0.1' NAME FROM dual UNION ALL
  4.   SELECT 3 id, 2 pid, '0.1.1' NAME FROM dual UNION ALL
  5.   SELECT 4 id, 3 pid, '0.1.1.1' NAME FROM dual UNION ALL
  6.   SELECT 5 id, 4 pid, '0.1.1.1.1' NAME FROM dual UNION ALL
  7.   SELECT 6 id, 5 pid, '0.1.1.1.1.1' NAME FROM dual),
  8. attr_object_types AS
  9.  (SELECT 1 id, 1 type_id, 1 schema_id, 0 options FROM dual UNION ALL  
  10.   SELECT 2 id, 1 type_id, 1 schema_id, 2 options FROM dual UNION ALL
  11.   SELECT 2 id, 2 type_id, 1 schema_id, 0 options FROM dual UNION ALL -- !!!
  12.   SELECT 3 id, 2 type_id, 1 schema_id, 0 options FROM dual UNION ALL
  13.   SELECT 4 id, 3 type_id, 1 schema_id, 0 options FROM dual UNION ALL
  14.   SELECT 5 id, 3 type_id, 1 schema_id, 0 options FROM dual UNION ALL
  15.   SELECT 6 id, 3 type_id, 1 schema_id, 2 options FROM dual UNION ALL
  16.   SELECT 6 id, 4 type_id, 1 schema_id, 0 options FROM dual UNION ALL -- !!!
  17.   SELECT 6 id, 5 type_id, 1 schema_id, 0 options FROM dual UNION ALL -- !!!
  18.  
  19.   SELECT 7 id, 4 type_id, 1 schema_id, 0 options FROM dual UNION ALL
  20.   SELECT 8 id, 4 type_id, 1 schema_id, 0 options FROM dual UNION ALL
  21.   SELECT 9 id, 4 type_id, 2 schema_id, 0 options FROM dual UNION ALL
  22.   SELECT 7 id, 5 type_id, 1 schema_id, 0 options FROM dual UNION ALL
  23.   SELECT 10 id, 3 type_id, 2 schema_id, 0 options FROM dual UNION ALL
  24.   SELECT 8 id, 2 type_id, 1 schema_id, 0 options FROM dual),
  25. attrs AS
  26.  (SELECT 1 id, 1 schema_id, 'attr1' NAME FROM dual UNION ALL
  27.   SELECT 2 id, 1 schema_id, 'attr2' NAME FROM dual UNION ALL
  28.   SELECT 3 id, 1 schema_id, 'attr3' NAME FROM dual UNION ALL
  29.   SELECT 4 id, 1 schema_id, 'attr4' NAME FROM dual UNION ALL
  30.   SELECT 5 id, 1 schema_id, 'attr5' NAME FROM dual UNION ALL
  31.   SELECT 6 id, 2 schema_id, 'attr6' NAME FROM dual UNION ALL
  32.   SELECT 7 id, 2 schema_id, 'attr7' NAME FROM dual UNION ALL
  33.   SELECT 8 id, 2 schema_id, 'attr8' NAME FROM dual UNION ALL
  34.   SELECT 9 id, 2 schema_id, 'attr9' NAME FROM dual UNION ALL
  35.   SELECT 10 id, 2 schema_id, 'attr10' NAME FROM dual UNION ALL
  36.   SELECT 2 id, 2 schema_id, 'attr2' NAME FROM dual UNION ALL
  37.   SELECT 3 id, 2 schema_id, 'attr3' NAME FROM dual UNION ALL
  38.   SELECT 8 id, 1 schema_id, 'attr8' NAME FROM dual UNION ALL
  39.   SELECT 7 id, 1 schema_id, 'attr7' NAME FROM dual UNION ALL
  40.   SELECT 6 id, 1 schema_id, 'attr6' NAME FROM dual),
  41. ot AS
  42.  (SELECT ot.id,
  43.          ot.pid,
  44.          lpad(' ', 4 * (MAX(LEVEL) over(ORDER BY NAME) - LEVEL)) || ot.name NAME,
  45.          (MAX(LEVEL) over(ORDER BY NAME) - LEVEL) lvl
  46.     FROM object_types ot
  47.    START WITH ot.id = 6
  48.   CONNECT BY PRIOR ot.pid = id),
  49. att AS
  50. (SELECT aot0.*, a0.name
  51.   FROM attr_object_types aot0, attrs a0
  52.  WHERE aot0.id = a0.id
  53.    AND aot0.schema_id = a0.schema_id
  54. )
  55.  
  56. SELECT *
  57.   FROM ot o1, att a1
  58.  WHERE a1.type_id = o1.id
  59.    AND a1.schema_id = 1
  60.    AND NOT EXISTS (SELECT 1
  61.           FROM ot o2, att a2
  62.          WHERE a2.type_id = o2.id
  63.            AND o2.lvl < o1.lvl
  64.            AND a2.schema_id = a1.schema_id
  65.            AND a2.id = a1.id
  66.            AND a2.options = 2)
  67.    AND a1.options != 2;