SQL Abfrage Datensatz vorhanden ?

CleCle

Premier Customer
Advanced Certified
Mitglied seit
28. August 2024
Beiträge
21
Hallo zusammen,

ich verzweifele grade ich bekomme ein vermeintlich einfaches Problem nicht gelöst. Ich sitze da jetzt schon den halben Tag dran mit Probieren.

Problem:

Ich möchte in einer SQL-Tabelle schauen ob ein Datensatz vorhanden ist oder nicht. Danach geht es zu einem condition Element wo ich dann verzweige in vorhanden/nicht vorhanden.

Mein Lösungsansatz war eine SQL-Abfrage mit EXISTS

CONCATENATE("SELECT EXISTS (SELECT 1 FROM callflow_log WHERE call_id = '",session.callid,"');")

Aber irgendwie funktioniert das nicht.

Viele grüße

Clemens
 
Aber irgendwie funktioniert das nicht.
Das ist irgendwie keine brauchbare Fehlermeldung. :confused:

Wie lautet die konkrete Fehlermeldung?
Welches Problem soll gelöst werden?
Wie sieht das ER Modell aus?
Welches Datenbanksystem wird verwendet?
Welchen Typ hat session.callid?
 
  • Like
Reaktionen: CleCle
Das ist irgendwie keine brauchbare Fehlermeldung. :confused:

Wie lautet die konkrete Fehlermeldung?
Welches Problem soll gelöst werden?
Wie sieht das ER Modell aus?
Welches Datenbanksystem wird verwendet?
Welchen Typ hat session.callid?
Na ja, das Skript läuft durch ich erwarte eigentlich eine 0 bekomme aber immer eine 1 oder -1 je nachdem, wenn ich was ändere.

Das Problem ist, das ich die 1 auch dann zurückbekomme wenn der Datensatz vorhanden ist.

Ich habe mal screenshots der relevanten Bereiche hinzugefügt. Die Datenbank ist eine Postgress

Viele Grüße
Clemens

1735481421813.png
1735481438819.png



1735481479845.png
 

Anhänge

  • 1735481474859.png
    1735481474859.png
    9,5 KB · Aufrufe: 2
Das Problem ist, das ich die 1 auch dann zurückbekomme wenn der Datensatz vorhanden ist.
Das ist gut. Alles andere wäre schlecht. Wenn die Abfrage korrekt durchgeführt wird, dann sollte eben auch immer ein Ergebnis - eine Tabelle - geliefert werden. Dir geht es aber um den Inhalt, nicht um den Rückgabewert in Form einer Tabelle als solches.

Ich hatte es hier
https://www.3cx.de/forum/threads/fragen-zum-cfd-thema-datenbank-und-variablen.122187/post-443044
bereits erwähnt: der Zugang zu den Inhalten z.B. einer SQL Abfrage bekommt man mit GET_TABLE_CELL_VALUE. Man kann das unbearbeitete Ergebnis einer SQL Abfrage eben nicht direkt weiterverarbeiten so wie du es getan hast.

Die Abfrage select exists(select 1 ... gibt einen einzelnen SQL Wahrheitswert zurück. Im CFD ergibt die Abfrage des Ergebnisses mittels GET_TABLE_CELL_VALUE(databaseAccessComponent1.QueryResult,0,0) dann den Wert True oder False. Das Ergebnis sollte ein String und kein Bool sein, da der CFD sehr vieles eben als String verarbeitet.

Ein CFD Block Create Condition könnte dann z.B. mit der Abfrage EQUAL(GET_TABLE_CELL_VALUE(databaseAccessComponent1.QueryResult,0,0),"True") geprüft werden.

Noch ein abschließender Hinweis: wenn du während eines laufenden Anrufes z.B. mittels
select exists(select 1 from public.cl_calls where call_history_id = '<aktuelle_call_id>');
die 3CX eigene interne DB nach dem akt. Call abfragst wirst du immer False bekommen. Erst nach dem Anruf steht der Datensatz dort bereit.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: CleCle
Na ja, das Skript läuft durch ich erwarte eigentlich eine 0 bekomme aber immer eine 1 oder -1 je nachdem, wenn ich was ändere.

Das Problem ist, das ich die 1 auch dann zurückbekomme wenn der Datensatz vorhanden ist.
QueryResult liefert eine Tabelle zurück. Diese sollte eine Zeile mit einer Spalte enthalten, die dann true oder false enthält.
 
  • Like
Reaktionen: CleCle
genau das war das Problem. Das werde ich so schnell nicht mehr vergessen.

Mein CFD-Skript ist nun in der ersten Version fertig dank eurer Unterstützung. Vielen Dank dafür nochmal,

Ich wünsche allen einen guten Rutsch und einen guten Start ins Jahr 2025
 
  • Like
Reaktionen: fxbastler

Statistik des Forums

Themen
44.749
Beiträge
233.636
Mitglieder
78.492
Neuestes Mitglied
dirk.kuttler