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 循环在 proc 本身中构建数组并解析p字符串,并最终将其传递给查询。

希望这可以帮助。

编辑

我明白了,您传递了很多参数,但您的 proc 只是将第一个参数作为输入。这也是错误的,也是这里的主要错误。如果p参数输入为

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

然后,您可以使用上述解决方案。

于 2012-09-05T12:04:54.790 回答