0

テーブルフィールドの1つで文字列を検索し、ユーザーの新しいテーブルを返す関数を作成しようとしています。基本的に、私が持っている1つのテーブルの中に

create table fooSearchTable (
    id          integer, -- PG: serial
    name        LongName unique not null,
    queryDef    LongString not null,
    primary key (id)
);

ここで、queryDefは実行する別のクエリを保持する文字列です。たとえば、1つの行は

1 | resultName | select * from users where users.id = '4'

関数を開始するためにこの関数形式が与えられました

create or replace function searchUsers(_searchName text) returns table (userID integer) as $$
begin
end;
$$ language plpgsql stable;

SQLクエリを実行して、_searchName一致する行を見つける必要があります。

select queryDef from fooSearchTable f
where f.name = _searchName;

これは文字列を返しますが、関数でこの文字列を実行する方法がわからないため、userIDのテーブルを取得できます。どんな助けでもいただければ幸いです。

4

1 に答える 1

1

このようなものが動作するはずです:

create or replace function searchUsers(_searchName text) 
   returns table (userID integer) 
as $$
  _query varchar;
begin
  select queryDef
     into _query 
  from fooSearchTable f
  where f.name = _searchName;

  return query execute _query;
end
$$ language plpgsql;

(テストしていないため、構文エラーが含まれている可能性があります)

select .. intoステートメントが正確に 1 行を返す必要があることに注意してください。そうしないと、実行時にエラーが発生します。条件がこれを達成することを確認するかlimit、選択ステートメントに句を適用する必要があります。

これはここで説明されています:
http://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#AEN54092

于 2012-05-23T07:59:11.083 に答える