Zum Inhalt springen
  • 0

Pseudo- Volltextsuche


Thomas Rogenmoser

Frage

Ich habe schon öfters einen Wert gesucht, von dem ich nicht genau wusste in welcher Tabelle ich ihn suchen sollte.
Dazu habe ich dann mal untenstehende SQL zusammengebastelt (Vor allem Google war das, sie liegt deutlich über meinem Können und teilweise auch über meinem Verständnis 🤔).

Vielleicht hilft's jemandem weiter.

Und... vielleicht hat jemand noch Ideen, wie man es weiter verbessert, z.B. meine TODO's umsetzt...

 

--Pseudo Full text search
--from https://stackoverflow.com/questions/75172712/how-to-find-a-value-in-all-tables-on-firebird
--TODO: Spalte mit SQL zum Daten zeigen ist noch nicht wie gewünscht...

execute block
returns (
	table_name varchar(63),
        table_description varchar(128), 
	column_name varchar(63),
        show_result varchar(99)
        )
as
declare search_value varchar(30) = 'LBM'; --TODO: Wert abfragen im Stil von :searchterm statt Hartcodiert
--declare search_condition varchar(30) ='=';
declare search_condition varchar(30) ='containing'; --TODO: Wert abfragen im Stil von :searchterm statt Hartcodiert
declare has_result boolean;
begin
	for select 
          trim(r.rdb$relation_name)
          , substring(trim(r.rdb$description) from 1 for 127)
          , trim(f.rdb$field_name)
          , 'select * from ' || trim(r.rdb$relation_name) || ' where ' || trim(f.rdb$field_name) || ' like ' || 'search_value'  
          -- TODO:  search_condition & search_value sind an der Stelle nicht definiert...
    	from rdb$relation_fields f
    	join rdb$relations r on f.rdb$relation_name = r.rdb$relation_name
    	and r.rdb$view_blr is null
    	and (r.rdb$system_flag is null or r.rdb$system_flag = 0)
    	order by r.rdb$relation_name, f.rdb$field_position
    	into 
          :table_name
          , :table_description
          , :column_name
          , :show_result
	do
	begin
    	execute statement ('select exists(select * from "' || table_name || '" where "' || column_name || '" ' || search_condition || ' ?) from rdb$database') (search_value)
        	into has_result;
    	if (has_result) then
        	suspend;
    	when any do
    	begin
        	/* value not comparable with varchar, skip */
    	end
	end
end

 

Bearbeitet von Thomas Rogenmoser
Link zu diesem Kommentar
Auf anderen Seiten teilen

Empfohlene Beiträge

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...