Вопрос:
Мне нужно найти, существует ли строковое значение в любом столбце моей таблицы.
Возможно ли создать автоматическую процедуру или запрос в Firebird, которые выполняют эту работу без явных имен столбцов?
Имена столбцов можно найти по этому запросу:
выберите RDB $RELATION_FIELDS.rdb $field_name как NC из RDB $RELATION_FIELDS, где RDB $RELATION_FIELDS.rdb $relation_name = MY_Table_name
Я бы использовал процедуру, похожую на процедуру в firebird.
Кто-нибудь может мне помочь?
– отредактировать
SET TERM ^^ ; CREATE PROCEDURE P_FINDSTRINGINTABLE ( STRTOFIND VarChar(255), TBLNAME VarChar(255)) returns ( SQLCOMMAND VarChar(25000)) AS DECLARE VARIABLE condSTR VARCHAR(8000); DECLARE VARIABLE columnName VARCHAR(8000); begin sqlCommand = ‘select * from ‘|| upper( :TBLNAME ); condSTR = »; for select RDB$RELATION_FIELDS.rdb$field_name as NC from RDB$RELATION_FIELDS where RDB$RELATION_FIELDS.rdb$relation_name = upper( :TBLNAME ) into :columnName do begin condSTR = condSTR||columnName||’ LIKE »%’||STRTOFIND||’%» OR ‘; end IF ( CHAR_LENGTH(condSTR) > 0 ) THEN begin condSTR = ‘ where ‘ || left(condSTR, CHAR_LENGTH (condSTR)-3) || ‘;’; sqlCommand = sqlCommand|| condSTR; end ELSE sqlCommand = sqlCommand||’;’ ; end ^^ SET TERM ; ^^
Хорошо… Я создал правильную строку sql для моего поиска.
Теперь… если я выполняю эту процедуру Firebird, она возвращает команду sql как строку.
Существуют ли методы автоматического выполнения возвращенного select????
Лучший ответ:
Вы можете достичь чего-то достаточно близкого к тому, чего хотите, я верю, используя EXECUTE STATEMENT, чтобы создать представление, которое затем вернет значения.
Пример того, что я имею в виду:
sqlCommand = ‘select * from ‘|| upper( :TBLNAME ); /* Rest of your code for creating the sqlCommand variable */ viewCommand = «RECREATE VIEW V_SEARCH_RESULTS AS » || sqlCommand; EXECUTE STATEMENT viewCommand;
Таким образом, в основном ваша процедура P_FINDSTRINGINTABLE не вернет никаких значений, но (re) создаст представление, динамически называемое V_SEARCH_RESULTS. Все, что вам нужно сделать, это выбрать из этого представления, чтобы увидеть результаты.
Ответ №1
Если вам нужен полный текстовый поиск в вашей БД, я предлагаю вам использовать специализированную поисковую систему, которая интегрируется с Firebird. Это по соображениям производительности.
Взгляните на двигатели SphinxSearch или Solr.