Давайте возьмем пример из учебника JavaSE
public abstract class Shape {
public abstract void draw(Canvas c);
}
public class Circle extends Shape {
private int x, y, radius;
public void draw(Canvas c) {
...
}
}
public class Rectangle extends Shape {
private int x, y, width, height;
public void draw(Canvas c) {
...
}
}
Итак, почему список собак (кругов) не следует рассматривать неявно, список животных (фигур) - это потому, что этой ситуации:
// drawAll method call
drawAll(circleList);
public void drawAll(List shapes) {
shapes.add(new Rectangle());
}
Итак, у «архитекторов» Java было два варианта решения этой проблемы:
По понятным причинам это выбрало первый способ.
Твой друг здесь FIND_IN_SET Я ожидаю. Я впервые наткнулся на этот метод в этом вопросе: также рассмотрен в этом вопросе MYSQL - Хранимая процедура с использованием разделенной запятой строки в качестве переменной Вход
Документация MySQL для FIND_IN_SET находится здесь http : //dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set
Итак, ваша процедура станет
CREATE DEFINER=`root`@`localhost`
PROCEDURE `search_equipment`(
IN equip VARCHAR(100),
IN category VARCHAR(255)
)
BEGIN
SELECT *
FROM Equipment
WHERE e_description LIKE CONCAT("%",equip,"%")
AND FIND_IN_SET(e_type,category)
END
Это зависит от того, что строка категории представляет собой список с разделителями-запятыми, поэтому ваш код вызова становится
String type = "I.T. Equipment,Office Supply";
CALL search_equipment('some equipment', type);
(ps исправил опечатку в ваших аргументах, которые вы набрали categoy)
вам нужно создать динамическое состояние:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `search_equipment`(IN equip VARCHAR(100), IN category VARCHAR(255))
BEGIN
SET @s =
CONCAT('SELECT *
FROM Equipment
WHERE e_description
LIKE \'%',equip,'%\'
AND e_type IN (',category,')');
PREPARE stmt from @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt3;
END$$
Это помогает мне выполнить условие IN. Надеюсь, это вам поможет ..
CREATE PROCEDURE `test`(IN Array_String VARCHAR(100))
BEGIN
SELECT * FROM Table_Name
WHERE FIND_IN_SET(field_name_to_search, Array_String);
END//;
Вызов:
call test('3,2,1');