From 8b1569afa244793b44fd6665ce4804a5ad2d6f95 Mon Sep 17 00:00:00 2001 From: qixinzhi Date: Fri, 12 Jul 2024 05:02:18 +0000 Subject: [PATCH] * [misc,0.5h] add dm function. --- db/dm_function.sql | 47 ++++++++++++++++++++++++++++++++++++++++ module/install/model.php | 8 +++++-- 2 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 db/dm_function.sql diff --git a/db/dm_function.sql b/db/dm_function.sql new file mode 100644 index 0000000000..31b13380a8 --- /dev/null +++ b/db/dm_function.sql @@ -0,0 +1,47 @@ +CREATE OR REPLACE FUNCTION FIND_IN_SET + ( + piv_str1 varchar2, + piv_str2 varchar2, + p_sep varchar2 := ',') + RETURN NUMBER + IS + l_idx number:=0; -- 用于计算piv_str2中分隔符的位置 + str varchar2(500); -- 根据分隔符截取的子字符串 + piv_str varchar2(500) := piv_str2; -- 将piv_str2赋值给piv_str + res number :=0; -- 返回结果 + loopIndex number :=0; +BEGIN + -- 如果piv_str中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res=1 + IF instr(piv_str, p_sep, 1) = 0 THEN + IF piv_str = piv_str1 THEN + res := 1; + END IF; + ELSE + -- 循环按分隔符截取piv_str + LOOP + l_idx := instr(piv_str, p_sep); + loopIndex:=loopIndex+1; + -- 当piv_str中还有分隔符时 + IF l_idx > 0 THEN + -- 截取第一个分隔符前的字段str + str:= substr(piv_str, 1, l_idx-1); + -- 判断 str 和piv_str1 是否相等,相等 res=1 并结束循环判断 + IF str = piv_str1 THEN + res:= loopIndex; + EXIT; + END IF; + piv_str := substr(piv_str, l_idx+length(p_sep)); + ELSE + -- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=1 + IF piv_str = piv_str1 THEN + res:= loopIndex; + END IF; + -- 无论最后是否相等,都跳出循环 + EXIT; + END IF; + END LOOP; + -- 结束循环 + END IF; + -- 返回res + RETURN res; +END FIND_IN_SET; diff --git a/module/install/model.php b/module/install/model.php index 753689331b..6d9aa92db6 100644 --- a/module/install/model.php +++ b/module/install/model.php @@ -160,8 +160,12 @@ class installModel extends model */ public function execDMSQL(): bool { - $dbFile = $this->app->getAppRoot() . 'db' . DS . 'dm.sql'; - $tables = explode(';', file_get_contents($dbFile)); + $dbPath = $this->app->getAppRoot() . 'db' . DS; + $dbFile = $dbPath . 'dm.sql'; + $dbFuncFile = $dbPath . 'dm_function.sql'; + + $tables = explode(';', file_get_contents($dbFile)); + $tables[] = file_get_contents($dbFuncFile); foreach($tables as $table) {