29 lines
763 B
Plaintext
29 lines
763 B
Plaintext
DELIMITER //
|
|
CREATE OR REPLACE PROCEDURE execute_multiple_sql(IN v_sql TEXT)
|
|
BEGIN
|
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
|
BEGIN
|
|
GET DIAGNOSTICS CONDITION 1
|
|
@sqlstate = RETURNED_SQLSTATE,
|
|
@errno = MYSQL_ERRNO,
|
|
@text = MESSAGE_TEXT;
|
|
|
|
SELECT 1 AS code, CONCAT('Error: ', @errno, ' (', @sqlstate, '): ', @text) AS msg;
|
|
END;
|
|
|
|
-- 按分号分割并执行多条语句
|
|
SET @sql = v_sql;
|
|
WHILE LENGTH(@sql) > 0 DO
|
|
SET @statement = SUBSTRING_INDEX(@sql, ';', 1);
|
|
SET @sql = SUBSTRING(@sql, LENGTH(@statement) + 2);
|
|
|
|
IF LENGTH(TRIM(@statement)) > 0 THEN
|
|
PREPARE stmt FROM @statement;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
END IF;
|
|
END WHILE;
|
|
|
|
SELECT 0 AS code, 'ok' AS msg;
|
|
END//
|
|
DELIMITER ; |