火鸟搜索并在所有列中找到一个字符串值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了火鸟搜索并在所有列中找到一个字符串值相关的知识,希望对你有一定的参考价值。
我需要查找表中的任何一列是否存在字符串值。能否在Firebird中自动创建过程或查询,在不明确列名的情况下执行这项工作?
列名可以通过这个查询来查找。
select RDB$RELATION_FIELDS.rdb$field_name as NC from RDB$RELATION_FIELDS where RDB$RELATION_FIELDS.rdb$relation_name = MY_Table_name。
我将使用一个类似于火鸟的程序。
谁能帮帮我?
-- 编辑
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不会返回任何值,而是(重新)动态地创建一个名为V_SEARCH_RESULTS的视图。然后你所要做的就是在这个视图中进行选择来查看结果。
另一答案
如果你需要在你的数据库中进行全文搜索,我建议你使用与Firebird集成的专用搜索引擎,这是出于性能考虑。这是出于性能的考虑,可以看看SphinxSearch或Solr引擎。
以上是关于火鸟搜索并在所有列中找到一个字符串值的主要内容,如果未能解决你的问题,请参考以下文章
搜索一个值,如果存在一个值,添加一行并在谷歌电子表格中复制数据