【发布时间】:2012-06-06 08:48:13
【问题描述】:
我需要查找表中的任何列中是否存在字符串值。 是否可以在 Firebird 中自动创建过程或查询来执行这项工作而无需明确列名?
可以使用此查询找到列名:
选择 RDB$RELATION_FIELDS.rdb$field_name 作为 NC from 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的方法?
【问题讨论】:
-
您可以使用执行语句并将字符串传递给它firebirdsql.org/refdocs/langrefupd21-psql-execstat.html
-
如果我使用执行字符串(我的变量“sqlCommand”)Firebird 引发了以下异常“ISC ERROR CODE:335544928”
-
但是返回字符串是正确的。我也在 sql shell 中尝试过这个: EXECUTE STATEMENT (EXECUTE PROCEDURE P_FINDSTRINGINTABLE ('str', 'myTable') ) 但不起作用。 :(
-
你能告诉我你的数据库的默认字符集吗?