first commit
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
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 ;
|
||||
Reference in New Issue
Block a user