2012-01-25 8 views
1

パラメータ:データベースの設計:選択クエリを機能上はこのようなものは可能かもしれない場合、私は思っていた

SELECT * FROM table1 
WHERE a1 = ... AND a2 = ... AND b1 = ... AND b2 = ... 

はしかし、本当にここで起こっていることは、私は次のように、DBの機能を呼び出しています、ということです

(b1,b2) 

ので、アイデアは、エンドユーザーの視点から、それは感じているということである:タイプを返し

func1(a1,a2); 

しかし、私たちが通常行っているようにテーブルを照会するのと同じように、関数呼び出しと結果のクエリ選択はユーザーから隠され、裏で行われます。

これを達成できる可能性のある設計をDBで提案するには、どんな助力もあれば幸いです。 (たとえば、table1は何らかの仮想テーブルまたはビューになる可能性があります)。

+0

データベースプラットフォームを指定する必要があります。 – RedFilter

+0

私はPostgreSQLを使用しています。 – Larry

答えて

0

あなたのデータベースプラットフォームを知らなくても、私は推測しかできません。

SQL Serverでは、Table Valued Function(TVF)と記述します。

PostgreSQLにも同様にsupportが表示されます。

機能内でa1b1と評価されます。外側の選択は、WHERE節のb1b2にのみ関係します。

+0

私が使っているPostgreSQLはどうですか? – Larry

+0

PostgreSQLの関数からテーブルの値を返すことができるようです:http://www.postgresql.org/docs/9.0/static/sql-createfunction.html – RedFilter

+0

あなたの答えを拡張して、おそらく私が指定したシナリオを使って、これをどのように解決できるか、thnx。 – Larry

0

ほとんどのデータベースのストアドプロシージャは、一連の行を返すことができます。

この目的のために、PostgreSQLのストアドファンクションはreturn a cursorにすることができます(「カーソルの返却」を参照)。

+0

これはどういう使い方を説明するか、元の質問を使った小さな例を与えることができますか? – Larry

+0

@Larryあなたは「結果のクエリ選択はユーザーから隠され、舞台裏で行われる」と述べました。だから、カーソル(またはRedFilterが示唆したようにRETURNS TABLE)を返す関数内でクエリを隠すことができます... –

+0

私は質問で誤解していないことを願っていますが、私が得ようとしていることは、 WHERE句を介してパラメータ名と値を指定することができますが、これは適切に解析されます(つまり、関数呼び出し、クエリ選択に使用されるものがあります。 。しかし、ユーザーがparamsにWHERE句を使用できるようにすることは可能ですか? (もしそうなら、それは私が必要としているものなのですが、私は提案をさらに詳しく見ていきます)。ありがとう! – Larry

1

正確なクエリを提供する方法が見つかりません。

最も近いのは、from句の関数を呼び出すことだけです。構文が異なり、where句ではなく関数呼び出しで関数パラメータを指定しています。

例えば:私たちは、私は、where句からパラメータをクエリを書き直すと移動することができるかもしれないPostgresqlのRuleシステムを見てなかった

select * from myfun(4,5); 

b1 b2 
---- ---- 
9 20 

を呼び出すことができます

CREATE OR REPLACE FUNCTION myfun(a1 INT, a2 INT) 
RETURNS TABLE (b1 int, b2 int) 
AS 
$$ 
BEGIN 
    RETURN QUERY (SELECT a1+a2 AS b1, a1*a2 AS b2); 
END; 
$$ 
LANGUAGE plpgsql; 

しかし、私は方法を見つけることができませんでした。