Col*_*747 7 mysql sql stored-procedures
我想创建一个存储过程,它接受IN参数中的所有值作为单个字符串.
DELETE FROM object
WHERE Type NOT IN
('ListGrid',
'TextField',
'SpinBox',
'MenuButton',
'ListGrid',
'RadioButton',
'DropDown',
'PopUp',
'Element',
'Checkbox',
'TreeDropDown',
'TblColumn',
'Button',
'Link',
'Filter',
'TblRow',
'GridRow',
'Popup')
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的一个例子,但它不起作用.
DELIMITER //
CREATE PROCEDURE deleteObjectTypes(IN p_type VARCHAR(255))
BEGIN
SET @query = CONCAT ('DELETE FROM object WHERE Type NOT IN (',p_type,')');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''List)' at line 1
Run Code Online (Sandbox Code Playgroud)
运行此查询时:
CALL deleteObjectTypes("'ListGrid1','TextField1','SpinBox1','MenuButton1','ListGrid2','TextField2','SpinBox2','MenuButton2','ListGrid3','TextField3','SpinBox3','MenuButton3','ListGrid4','TextField4','SpinBox4','MenuButton4','ListGrid5','TextField5','SpinBox5','MenuButton5','ListGrid6','TextField6','SpinBox6','MenuButton6'")
Run Code Online (Sandbox Code Playgroud)
Fra*_*s P 14
您需要将VARCHAR大小更改为其最大值(或较低的有效值).
DELIMITER //
CREATE PROCEDURE deleteObjectTypes(IN p_type VARCHAR(65535))
BEGIN
SET @query = CONCAT ('DELETE FROM object WHERE Type NOT IN (',p_type,')');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
但是,请注意,如果使用多字节字符集,则限制较低:
VARCHAR(21844) CHARACTER SET utf8
Run Code Online (Sandbox Code Playgroud)
可以看出这里.
| 归档时间: |
|
| 查看次数: |
26261 次 |
| 最近记录: |