Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Autodesk GIS Produkte
  Oracle-SQL in einer Zeile ausgeben für Tooltips

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Oracle-SQL in einer Zeile ausgeben für Tooltips (2530 mal gelesen)
LarsB
Mitglied



Sehen Sie sich das Profil von LarsB an!   Senden Sie eine Private Message an LarsB  Schreiben Sie einen Gästebucheintrag für LarsB

Beiträge: 446
Registriert: 13.05.2003

Windows 7 Prof. 64-Bit
Tarox-Workstation mit Xeon 8 Core CPU mit 3.60 GHz
24 GB RAM
NVIDIA Quadro 4000
AutoCAD Map 2019
MapEdit
AutoCAD 2019

erstellt am: 22. Jul. 2014 10:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Forum,

ich versuche seit einiger Zeit die Ergebnisse einer SQL-Abfrage (ORACLE 11g) in eine Zeile zu quetschen.

Hintergrund: Ich möchte die Baulastnummer als Tooltip anzeigen lassen. hier kann ich aber keine Mehrfachergebnisse anzeigen lassen.
Ich hoffe nun, dass alle Ergebnisse angezeigt werden, wenn ich sie per SQL in einer Zeile ausgeben lasse.

1. Versuch (Baulasten der Objekte mit FID 503749):

select listagg(BAULASTNR, ', ') within GROUP (order by BAULASTNR) FROM V_BAULASTEN WHERE FID = 503749

Das funktioniert leider nur so lange, bis GEOM mit dabei ist. GEOM kann nicht gruppiert werden.


2. Versuch:

SELECT FID, GEOM, SUBSTR(SYS_CONNECT_BY_PATH (BAULASTNR  , ','), 2) csv

FROM (SELECT FID, GEOM, BAULASTNR , ROW_NUMBER () OVER (ORDER BY BAULASTNR) rn,

COUNT (*) OVER () cnt

FROM V_BAULASTEN)

WHERE FID = 503749 and rn = cnt

START WITH rn = 1

CONNECT BY rn = PRIOR rn + 1;


Ergebnis: ORA-01489: Das Ergebnis der Zeichenfolgenverkettung ist zu lang
Ich vermute ein Problem mit der Where-Bedingung.

Hat jemand Vorschläge oder ganz andere Lösungswege?

Vielen Dank.

[Diese Nachricht wurde von LarsB am 28. Jul. 2014 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1521
Registriert: 17.08.2005

AutoCAD Map aktuell, Designsuite
VS6, VS.net

erstellt am: 25. Jul. 2014 15:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für LarsB 10 Unities + Antwort hilfreich

Hallo Lars,

listagg und WM_Concat sind wohl die richtigen Befehle.
Ich verstehe allerdings nicht wie deine Tabelle aufgebaut ist.

In der Regel habe ich eine Tabelle A mit der Geometrie und eine Tabelle (B) mit den Attributen die ich dann als Tooltip an A linearisieren will.

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1521
Registriert: 17.08.2005

AutoCAD Map aktuell, Designsuite
VS6, VS.net

erstellt am: 25. Jul. 2014 16:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für LarsB 10 Unities + Antwort hilfreich

Hallo Lars,

hier noch ein Beispiel:

Code:
-- Tabellen anlegen
create table eltern(fid number(10),name varchar2(50));
create table kinder(fid number(10),fid_Eltern number(10),name varchar2(50));

Code:
--Werte einfügen
insert into eltern values(1,'Mueller');
insert into Kinder values(1,1,'Mueller Kind 1');
insert into Kinder values(2,1,'Mueller Kind 2');

insert into eltern values(2,'Maier');
insert into Kinder values(3,2,'Maier Kind 1');

insert into eltern values(3,'Krause');
insert into Kinder values(4,3,'Krause Kind 1');
insert into Kinder values(5,3,'Krause Kind 2');
insert into Kinder values(6,3,'Krause Kind 3');

insert into eltern values(4,'Ludwig');
commit;


Code:
-- Abfrage mit WM_CONCAT
select
  e.fid,
  e.name,
  case when Namen is null then
      '- Keine Kinder -'
  else
      K.Namen
  end    as ListeKinder
from
  Eltern e,
  (select  fid_Eltern, wm_concat(name) as Namen from kinder group by fid_Eltern) K
where
  e.fid=k.fid_Eltern(+)
;


Code:
--Abfrage mit ListAgg
select
  e.fid,
  e.name,
  case when Namen is null then
      '- Keine Kinder -'
  else
      K.Namen
  end    as ListeKinder
from
  Eltern e,
  (select  fid_Eltern, listagg(name,',') within Group (order by Name) as Namen from kinder group by fid_Eltern) K
where
  e.fid=k.fid_Eltern(+)
;

WM_Concat läuft auch bereits bei Oracle 10. ListAgg bietet aber die Möglichkeit ein beliebiges Trennzeichen zu setzen und die Liste einfacher zu sortieren. ListAgg ist aber eine Funktion der Enterprise Edition.
Code:
Ausgabe
FID NAME    LISTEKINDER                             
--- ------- -----------------------------------------
1  Mueller Mueller Kind 1,Mueller Kind 2           
2  Maier  Maier Kind 1                             
3  Krause  Krause Kind 1,Krause Kind 2,Krause Kind 3
4  Ludwig  - Keine Kinder -                         
4 rows selected.

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

LarsB
Mitglied



Sehen Sie sich das Profil von LarsB an!   Senden Sie eine Private Message an LarsB  Schreiben Sie einen Gästebucheintrag für LarsB

Beiträge: 446
Registriert: 13.05.2003

Windows 7 Prof. 64-Bit
Tarox-Workstation mit Xeon 8 Core CPU mit 3.60 GHz
24 GB RAM
NVIDIA Quadro 4000
AutoCAD Map 2019
MapEdit
AutoCAD 2019

erstellt am: 28. Jul. 2014 08:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Guten Morgen und Danke für die Antworten.

Also listagg funktioniert bei mir mit Geometrie nicht, wie ich oben geschrieben habe. Die Enterprise Edition haben wir.

WM_CONCAT teste ich gleich mal. Die Tabelle ist recht simpel aufgebaut.

FID  |  BAULASTNR  |  OBJEKTNR  |  FLST  | GEOM  |

Die Trennung zwischen Geometrie und Sachdaten haben wir auch in einem Projekt. Das erweist sich in der Praxis aber oft als unpraktisch, da immer die Brücke zwischen Geometrie und Sachdaten hergestellt werden muss.

Gruß Lars

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1521
Registriert: 17.08.2005

AutoCAD Map aktuell, Designsuite
VS6, VS.net

erstellt am: 28. Jul. 2014 18:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für LarsB 10 Unities + Antwort hilfreich

Hallo Lars,

du kannst die gleiche Tabelle ja zweimal verwenden, einmal mit und einmal ohne Geometrie.

Ich verstehe aber immer noch nicht was du nach welchen Kriterium zusammenfassen willst.

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



Technischer Zeichner Sonderfahrzeugbau (m/w/d)

Bei Schmitz Feuerwehrtechnik GmbH verschmelzen Tradition und Innovation in der Sonderfahrzeugbranche. Seit 1934 fertigen wir Feuerwehrfahrzeuge, angefangen bei Kleinfahrzeugen bis hin zu Flugfeldlöschfahrzeugen. Mit unserem vielfältigen Kundenkreis, bestehend aus berufs- und freiwilligen Feuerwehren, Industrie, Flughäfen und öffentlichen Verwaltungen weltweit, blicken wir in eine Zukunft, in der die Rolle der Feuerwehren und Katastrophenschützer zunehmend an Bedeutung gewinnen wird....

Anzeige ansehenTechnischer Zeichner, Bauzeichner
LarsB
Mitglied



Sehen Sie sich das Profil von LarsB an!   Senden Sie eine Private Message an LarsB  Schreiben Sie einen Gästebucheintrag für LarsB

Beiträge: 446
Registriert: 13.05.2003

Windows 7 Prof. 64-Bit
Tarox-Workstation mit Xeon 8 Core CPU mit 3.60 GHz
24 GB RAM
NVIDIA Quadro 4000
AutoCAD Map 2019
MapEdit
AutoCAD 2019

erstellt am: 29. Jul. 2014 08:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

um mir in MapEdit Tooltips anzeigen lassen zu können, muss ich per SQL die nötigen Daten auslesen.
Zuerst eine ID hier also die FID, dann die Geometrie (GEOM) und dann die Daten, die angezeigt werden sollen. In diesem Fall die Baulasten.

Gestern Abend ist es mir aber gelungen. Vielleicht nicht elegant aber es funktioniert:

SELECT
FID,
SDO_AGGR_UNION(SDOAGGRTYPE(GEOM, 0.005)) as GEOM,
listagg(BAULASTNR, ', ') within GROUP (order by BAULASTNR) AS BLNR
FROM V_BAULASTEN
Where FID = 503749
GROUP BY FID

Gruß Lars

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz