0

これが悪い例であることは承知していますが、物事を単純化しようとしているので、このコードは回りくどい方法で書かれています。次のようなデータベースにクエリが保存されているとします。

クエリ テーブル

id    query
1     concat('SELECT * FROM table1 WHERE year = ', _year, 'order by name')
2     concat('SELECT * FROM table2 WHERE year = ', _year, 'order by name')

次のルーチンを実行したい

DECLARE _year;
SET _year= "2013";
SET @SQL = (SELECT query FROM queries WHERE id = 1);    
PREPARE stmt FROM @SQL;
EXECUTE stmt; 

これは私が現在持っているものですが、機能していません。データベースからクエリを選択し、いくつかの変数を渡してクエリを実行しようとしています。

4

1 に答える 1

0

特定のパラメーターを除いて、クエリを事前に決定できる場合は、判別式を使用した UNION クエリの使用を検討できます。次に、クエリ テーブルを使用してユニオン内の特定のクエリを選択し、それらにパラメーターを適用します。クエリ自体は、データベースのビューで定義されます。

SQL は、ほとんどの DBMS で動的にならないように意図されており、これを覆そうとすると、ほぼ確実にパフォーマンスが低下し、セキュリティ上の問題が発生する可能性があります。

CREATE VIEW UnionView
AS SELECT *, 1 as Type, Value1 AS Param FROM Table1 
UNION ALL SELECT *, 2 as Type, Value2 AS Param FROM Table1
UNION ALL SELECT *, 3 as Type, Value3 AS Param FROM Table1;

SELECT * FROM UnionView WHERE Type = 2 AND Param = 2;

動作を示す例については、SqlFiddleを参照してください。

于 2013-03-18T21:17:32.453 に答える