AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Array mit DB Ergebnismenge vergleichen

Array mit DB Ergebnismenge vergleichen

Ein Thema von rokli · begonnen am 15. Mai 2018 · letzter Beitrag vom 16. Mai 2018
Antwort Antwort
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
 
Delphi 12 Athens
 
#1

AW: Array mit DB Ergebnismenge vergleichen

  Alt 15. Mai 2018, 21:28
@Delphi.Narium: Warum keine Temp-Table? (am Besten nur für diese Session)
Um es auf allen Systemen gleich zu haben und nicht bei der Portierung immer daran zu denken
Vorallem falls mal wer auf die blöde Idee kommt sowas in einer MultiUserDB zu machen, wo mehrere gleichzeitig auf die "selbe" Tabelle schreiben und ihre Daten gegenseitig löschen und füllen würden.


PS: das "Dual" als View ala "SELECT true" oder als StoredProc und schon kann auch ohne Rechtevergabe niemand was dran ändern.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (15. Mai 2018 um 21:32 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.875 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Array mit DB Ergebnismenge vergleichen

  Alt 15. Mai 2018, 22:07
Zitat:
Temptable: muss man leider immer wieder anlegen
Eine globale (GTT) kann man auch als persistent konfigurieren.
Markus Kinzler
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
302 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Array mit DB Ergebnismenge vergleichen

  Alt 16. Mai 2018, 07:26
Hallo Jungs!

Vielen Dank für die Infos! Im Moment halte ich die Idee von Uwe auch für die Beste - und wahrscheinlich auch die performanteste.

Gruß
Rolf
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: Array mit DB Ergebnismenge vergleichen

  Alt 16. Mai 2018, 07:57
Im Moment halte ich die Idee von Uwe auch für die Beste - und wahrscheinlich auch die performanteste.
Sag ich doch

dual oder was auch immer:
Es sollte möglichst nicht nur eine Rechtefrage sein, sondern auch per Constraints abgesichert sein.

Was Einheitlichkeit angeht, bietet sich natürlich ein View an, wie Himitsu sagte. Ob der unbedingt dual heißen muss, sei dahin gestellt. Ich denke, genau wie jeder (jedes Unternehmen) ein set von "home grown" Delphi units hat, hat man eine solche View Schicht vielleicht für die hauseigenen Anwendungen.

Viele solcher Statements oder Scripte kursieren auch im Netz beim Thema Datenbankmigration. Die sind in der Regel darauf gemünzt eine DB sql kompatibel zu einer anderen zu machen, aber das kann man ja auch an eigene Bedürfnisse anpassen.
Gruß, Jo
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Array mit DB Ergebnismenge vergleichen

  Alt 16. Mai 2018, 08:11
Im Moment halte ich die Idee von Uwe auch für die Beste - und wahrscheinlich auch die performanteste.
Sag ich doch
Gibts sowas auch für Oracle? Das mit der Values(...) kannte ich so noch nicht.
Oder gäbe es da eine andere Möglichkeit das mit Join zu lösen, statt mit Subselect?
Ralph
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Array mit DB Ergebnismenge vergleichen

  Alt 16. Mai 2018, 09:49
Gibts sowas auch für Oracle? Das mit der Values(...) kannte ich so noch nicht.
Oder gäbe es da eine andere Möglichkeit das mit Join zu lösen, statt mit Subselect?
Es gibt erstmal die Table Function, darüber kann man views, functions, vermutlich auch package functions und letztlich auch Wertelisten einbinden.
Wenn es erstmal dann erstmal Tabelle ist, dann von da an normal mit Join weiter.
Code:
select column_value
from table(sys.dbms_debug_vc2coll('One', 'Two', 'Three', 'Four'));
..
select column_value
from table(sys.dbms_debug_vc2coll(1,2,3,4));
..
select distinct column_value from table(sys.odcinumberlist(1,1,2,3,3,4,4,5))
aus SO:
https://stackoverflow.com/questions/...lues-in-oracle

für "Spezial"funktionen z.B.:
http://stevenfeuersteinonplsql.blogs...ction-and.html

P.S.: Bevor man das so wie im Beispiel einbindet (entsprechende Berechtigungen müssen da gesetzt sein), würde ich auch hier empfehlen für die sys functions Wrapper im Anwendungsschema oder Tool Schema zu definieren, die dann mit normalen Berechtigungen auskommen. Dann werden zwar bei der Erzeugung der Wrapper Sonderrechte benötigt, aber die Wrapperfunktion ist dann ein normales Schemaobjekt ohne Sonderlocken.
Gruß, Jo

Geändert von jobo (16. Mai 2018 um 09:53 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Array mit DB Ergebnismenge vergleichen

  Alt 16. Mai 2018, 10:06
Danke Jobo!

P.S.: Bevor man das so wie im Beispiel einbindet (entsprechende Berechtigungen müssen da gesetzt sein), würde ich auch hier empfehlen für die sys functions Wrapper im Anwendungsschema oder Tool Schema zu definieren, die dann mit normalen Berechtigungen auskommen. Dann werden zwar bei der Erzeugung der Wrapper Sonderrechte benötigt, aber die Wrapperfunktion ist dann ein normales Schemaobjekt ohne Sonderlocken.
Wichtiger Hinweis, der zu beachten ist, wenn einem der DBA nicht den Kopf abreißen soll .
Ralph
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: Array mit DB Ergebnismenge vergleichen

  Alt 16. Mai 2018, 10:18
Ja! Wer wem den Kopf abreißt, ist im Zweifel nachher von einem Ermittlerteam zu ermitteln..

[ot]
Ach und noch was Oracle spezifisches (also für Leute, die nicht Multi DB affin sind oder sein müssen)
Mit Package Functions hat man die Möglichkeit, die Wertebefüllung und den Datenabruf zu trennen.
Die Package.Funktion wird im (tiefsten ) Inneren eines Views verwendet, das Setzen der Werte läuft nebenher über einen Setter im gleichen(!) Package unter Verwendung einer Package Variable.
Damit hat kann man Views so konstruieren, dass sie Session (~user} spezifisch aufgerufen werden können und jeweils ganz unterschiedliche (oder gar keine, wenn nicht initialisiert) Daten zurückgeben.

Achtung, das geht natürlich nicht in Systemen, die Verbindungen nur bei Bedarf öffnen, also häufig Web oder .Net.
In klassischen CS Umgebungen mit single session, oder Session Kontrolle kann man es nutzen. Würde man aber wohl nur tun, wenn es Performanceprobleme mit komplexen Selektstatemntes gibt (oder vielleicht zum Datenschutz- aber da hat Oracle auch einige andere Mechanismen)
[ot]
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz