テーブルのいずれかの列に文字列値が存在するかどうかを確認する必要があります。明示的な列名を作成せずにこの作業を実行するプロシージャまたはクエリをFirebirdで自動的に作成することは可能ですか?
列名は、次のクエリで見つけることができます。
RDB$RELATION_FIELDSからNCとしてRDB$RELATION_FIELDS.rdb$field_nameを選択します。ここでRDB$RELATION_FIELDS.rdb $ ratio_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コマンドが文字列として返されます。
返された選択を自動的に実行する方法はありますか?