我需要查找表中的任何列中是否存在字符串值。是否可以在 Firebird 中自动创建过程或查询来执行这项工作而无需明确列名?
可以使用此查询找到列名:
从 RDB$RELATION_FIELDS 中选择 RDB$RELATION_FIELDS.rdb$field_name 作为 NC 其中 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 命令。
是否有自动执行返回的选择的方法?