0

mysql を使用してプロシージャを記述します。しかし、mysql でこの手順を呼び出すとエラーが発生します。データセットで正しい結果が得られません。これらすべての電話番号を単一の引数で渡したいです。

my procedure
------------
CREATE  PROCEDURE pro_dndtesting1(in p text)
begin
  select fld_phonenumber from tbl_dndno_1 where fld_phonenumber in (p) and fld_opstype='A';
end
$$


 am getting error when i call this procedure in mysql

 calling statement
 -----------------
  call pro_dndtesting1("9942321400","9490582992","9490597318","9494363015","9703210545","9494304399","8790989211","9133733635","8706744769","8197401062","7382936474","9949290637","994961722")


error 
------
 Error Code: 1318. Incorrect number of arguments for PROCEDURE smsdnd.pro_dndtesting1; expected 1, got 2614


my aspx.vb code
----------------
  For i = 0 To Ds.Tables(0).Rows.Count - 1
                    Dim dq As String = ""

                    excelphone = Ds.Tables(0).Rows(i).Item(0).ToString
                    TextBox2.Text = TextBox2.Text + """" & excelphone & """" & ","


                Next
                Dim n As Integer
                n = TextBox2.Text.Length

                TextBox2.Text = TextBox2.Text.Substring(0, TextBox2.Text.Length - 1)
                Dim dnd As New DataSet1TableAdapters.pro_dndtesting1TableAdapter
                Dim dnddt As DataSet1.pro_dndtesting1DataTable = dnd.GetData(TextBox2.Text)
4

2 に答える 2

1
  • まず、「1112233,1115555,2223333」のように、カンマ区切りのテキストを使用する必要があります。
  • 次に、FIND_IN_SET関数を使用して、テーブル内のレコードをフィルター処理します。

例えば:

CREATE PROCEDURE pro_dndtesting1(IN p VARCHAR(255))
BEGIN
  SELECT
    fld_phonenumber
  FROM
    tbl_dndno_1
  WHERE
    FIND_IN_SET(fld_phonenumber, p);
END

実行手順:

CALL pro_dndtesting1('1112233,1115555,2223333');
于 2012-09-05T12:20:19.367 に答える
0

ここでpは、配列ではありません。inは配列を期待しており、string. したがって、エラー。

さて、この問題を解決するには、配列を mysql ストアド プロシージャに渡すことができないので、for ループを使用してp文字列を解析し、最終的にそれをクエリに渡すことをお勧めします。

お役に立てれば。

編集

なるほど、多くのパラメーターを渡していますが、proc は最初のパラメーターを入力として取っているだけです。これも間違っており、ここでの主なエラーです。pパラメータが次のような入力を持つ場合、上記の説明は有効です。

p="9942321400--9490582992--9490597318--9494363015--9703210545--9494304399--8790989211--9133733635--8706744769--8197401062--7382936474--9949290637--994961722"

次に、上記のソリューションを使用するだけです。

于 2012-09-05T12:04:54.790 に答える