13

リストを引数として取り、MySQL でストアド プロシージャを作成したいと考えています。たとえば、1 回の呼び出しで 1 つのアイテムに複数のタグを設定できるようにしたいとします。その場合、アイテムの ID と設定するタグのリストを取得するプロシージャを定義します。しかし、これを行う方法を見つけることができないようです。私が知る限り、リストのデータ型はありませんが、何とかエミュレートできますか? タグのリストはカンマで区切られた文字列で、どうにかして分割してループすることができますか?

通常、MySQL ストアド プロシージャでリストをどのように操作しますか?

4

4 に答える 4

9

この記事では、ストアド プロシージャは有効なテーブル列のデータ型のみをパラメーターとして許可するため、配列を解析してストアド プロシージャにする問題について、いくつかの良い議論があります。

mysql のcsvテーブル タイプを使用してできる便利なことがいくつかあります。つまり、フラット ファイルを db にロードする場合です。

ストアド プロシージャで一時テーブルを作成し、csv リストを反復処理して一時テーブルに挿入し、そのテーブルから値を選択するカーソルを作成できます。上記のスレッドのこの回答は、これを行う方法を示しています。

通常、データベースにアクセスする前に配列を分割し、各アイテムに対して個別にクエリを実行します。

于 2008-08-12T14:02:46.697 に答える
1

取得する複雑さに応じて、汎用リンク テーブルを使用できます。私のアプリケーションの 1 つには、ユーザーが選択できる複数のレポートがあります。たとえば、コンボ ボックスから 1 人の顧客だけでなく、レポートを実行する顧客のリストです。2 つのフィールドを持つ別のテーブルがあります。

  • UniqueID (ガイド)
  • アイテムID

疑似コードは次のようになります。

GUID guid = GenerateGUID()
try
  for each customer in customerList { INSERT(guid, customerId) }
  ExecuteSQLPocedure(guid)
  --the procedure can inner-join to the list table to get the list
finally
  DELETE WHERE UniqueID=guid      
于 2008-08-12T13:48:24.917 に答える
0

これらが SP で特に機能するかどうかはわかりませんが、MySQL 5 には ENUM および SET データ型があり、必要なことを実行できます。 http://dev.mysql.com/doc/refman/5.0/en/enum.html http://dev.mysql.com/doc/refman/5.0/en/set.html

于 2008-08-12T13:33:06.837 に答える
0

Choice のプログラミング言語である C# では、split() 関数とループは SQL よりも C# の方がプログラミングしやすいため、実際にはアプリケーション自体でこれを行います。

おそらく、SubString_Index()関数を確認する必要があります。

たとえば、次は google を返します。

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.google.com', '.', -2), '.', 1);
于 2008-08-12T13:36:40.307 に答える