1

私のSQL文は動的に構築されています。私は次のようなものを持っています

strSql := 'select name, tel, adress, activity_id as filtre_1, country_id as filtre_2, ... from ... where ...'

1 から n のフィルターを使用できます。filter_1 は、country_id として activity_id にすることができます。順序は重要ではありません。

リクエストがいくつ返されるかわからないため、filter_1、filter_2 の値を取得するにはどうすればよいですか?

通常、値を取得するには、次のようにします。

FOR rowResult IN EXECUTE strSql LOOP
        name := rowResult.name
        tel := rowResult.tel
        adress := rowResult.adress
        filtre_1 := rowResult.filtre_1
        filtre_2 := rowResult.filtre_2
END LOOP;

これはできないので、次のようなことをしたい

FOR rowResult IN EXECUTE strSql LOOP
        name := rowResult.name
        tel := rowResult.tel
        adress := rowResult.adress
        filtre_1 := rowResult("filtre_1")
        filtre_2 := rowResult("filtre_2")
END LOOP;

しかし、rowResult(stringfield)存在しません。

誰かがアイデアを持っていますか?

ありがとう

4

1 に答える 1

1

もっと効率的な方法があるかもしれませんが、配列に変換することで、匿名レコードからフィールドにアクセスできます。

strSql := 'select name, activity_id, country_id from test where activity_id = 2 and country_id = 1';
for rowResult in execute strSql loop
    temp := string_to_array(trim(rowResult::text, '()'), ',');
    activity_id := temp[2];
    country_id := temp[3];
end loop;

見るsql fiddle demo

そのためにhstoreを使用することも可能だと思いますが、今はテストできません:

    temp := hstore(rowResult);
    activity_id := temp -> 'f2'
    country_id := temp -> 'f3'
于 2013-08-26T08:48:22.547 に答える