2012-06-06 84 views
2

我需要查找某個字符串值是否存在於我的表的任何列中。 有可能在Firebird中創建自動過程或查詢來執行此工作而不顯示列名稱?火鳥搜索並在所有列中查找字符串值

列名可以使用此查詢來發現:

選擇RDB $ RELATION_FIELDS.rdb $ FIELD_NAME爲NC從 RDB $ RELATION_FIELDS其中RDB $ RELATION_FIELDS.rdb $ relation_name = MY_TABLE_NAME

我會用類似於火鳥過程..

http://www.mssqltips.com/sqlservertip/1522/searching-and-finding-a-string-value-in-all-columns-in-a-sql-server-table/

任何人都可以幫助我嗎?

- 編輯

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命令作爲字符串。

是否有方法自動執行返回的選擇?

+0

您可以使用執行語句並將字符串傳遞給它http://www.firebirdsql.org/refdocs/langrefupd21-psql-execstat.html – Mariuz

+0

如果我使用執行字符串(我的變量「sqlCommand」)火鳥提出的按照異常「ISC錯誤代碼:335544928」 – Danilo

+0

但是返回字符串是正確的。我也試過這在SQL外殼:EXECUTE STATEMENT(EXECUTE PROCEDURE P_FINDSTRINGINTABLE('str','myTable'))但不工作。 :( – Danilo

回答

1

您可以通過使用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視圖。您只需從該視圖中選擇即可查看結果。

1

如果您需要在數據庫中進行全文搜索,我建議您使用與Firebird集成的專用搜索引擎。這是出於性能原因。 看看SphinxSearch或Solr引擎。