62 lines
1.6 KiB
Plaintext
62 lines
1.6 KiB
Plaintext
DELIMITER //
|
|
|
|
CREATE OR REPLACE PROCEDURE `sysexec` (
|
|
IN p_token VARCHAR(100),
|
|
IN p_sql LONGTEXT
|
|
)
|
|
/*
|
|
function : 傳入 Insert/Update 的 sql 指令並執行
|
|
description: 不允許 drop delete 這類的 sql 語法
|
|
build date : 2018/05/05
|
|
|
|
modify history
|
|
item who date modify docs
|
|
==== ========== ========== ================================================
|
|
1 Michael 2018-11-05 init
|
|
2 [改寫者] 2023-11-15 改寫為 MariaDB 版本並最佳化
|
|
*/
|
|
BEGIN
|
|
DECLARE v_userid VARCHAR(100);
|
|
DECLARE v_exstr LONGTEXT;
|
|
DECLARE v_code INT;
|
|
DECLARE v_msg VARCHAR(255);
|
|
|
|
-- 根據傳入的 token 取得 userid
|
|
SELECT userid INTO v_userid FROM sys_users WHERE token = p_token LIMIT 1;
|
|
|
|
IF v_userid IS NULL THEN
|
|
SET v_code = 9;
|
|
SET v_msg = '請先登入系統再執行!!';
|
|
|
|
SELECT v_code AS code, v_msg AS msg;
|
|
SELECT '';
|
|
ELSEIF LOCATE('delete ', LOWER(p_sql)) > 0 OR LOCATE('drop ', LOWER(p_sql)) > 0 THEN
|
|
SET v_code = 4;
|
|
SET v_msg = '內含不允許執行的 sql 語法, 請重新輸入?!';
|
|
|
|
SELECT v_code AS code, v_msg AS msg;
|
|
SELECT '';
|
|
ELSE
|
|
BEGIN
|
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
|
BEGIN
|
|
SET v_code = 9;
|
|
SET v_msg = '語法有錯,請檢查語法後再重新執行!!';
|
|
|
|
SELECT v_code AS code, v_msg AS msg;
|
|
SELECT '';
|
|
END;
|
|
|
|
SET v_code = 0;
|
|
SET v_msg = '成功執行 SQL 語法';
|
|
|
|
SELECT v_code AS code, v_msg AS msg;
|
|
SET @dynamic_sql = p_sql;
|
|
PREPARE stmt FROM @dynamic_sql;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
END;
|
|
END IF;
|
|
END //
|
|
|
|
DELIMITER ; |