if (systemSetService?.get_sys_parameter) { this.initParameter = systemSetService?.get_sys_parameter(this.sys_parameter)?.parameter_value // console.log('默认参数', this.initParameter, this.sys_parameter) } watch( () => { return this.defaultQueryID }, () => { this.currentQueryID = this.defaultQueryID if (this.defaultQueryID === 'none') { this.needLoadData = true } }, {immediate:false, deep:true} ) watch( () => { return this.selDatas }, () => { this.hiddenSelDatas = [] if (this.selDatas?.length > 3 || !!this.isMobilePhone()) { this.selDatas.forEach((item,index) => { if(index > 2 || !!this.isMobilePhone()) { this.hiddenSelDatas.push({ no: item.query_id, label: item.query_name, icon: item.query_id === this.currentQueryID ? 'pi pi-check' : '', command: () => { this.onClickChip(item) } }) } }) } }, {immediate:false, deep:true} )
时间: 2024-02-14 12:36:11 浏览: 153
这段代码是一个 Vue.js 组件中的 JavaScript 代码块,主要用于监听数据变化并进行相应的处理。其中,第一部分代码用于获取系统参数并初始化参数值,通过调用 systemSetService?.get_sys_parameter 方法来获取指定参数的值,并将其保存到 this.initParameter 中。
第二部分代码使用 Vue.js 中的 watch 方法,监听数据的变化,当 this.defaultQueryID 发生变化时执行回调函数。如果 this.defaultQueryID 被设置为 'none',则将 this.needLoadData 设置为 true。
第三部分代码同样使用 watch 方法,监听 this.selDatas 的变化。当 this.selDatas 发生变化时执行回调函数。该回调函数会将 this.hiddenSelDatas 数组清空,并根据 this.selDatas 数组的长度和当前设备类型来决定是否将数据存储到 hiddenSelDatas 数组中。在存储数据时,会将数据转换为指定格式,并添加 command 属性,用于在点击数据时触发相应的回调函数。
需要注意的是,watch 方法中的 immediate 和 deep 参数都被设置为 false,表示不会在监听器初始化时立即执行回调函数,并且不会深度监听对象的变化。
相关问题
----找到pie维护的需要check什么参数的值--------- SELECT DISTINCT DPM.FAB , DPM.PRODUCT_ID , WP.WAT_PARAMETER_ID , DPM.PARAMETER_NAME , DPM.PARAMETER_MAPPING , DPM.LIMIT_FILE , DPM.TEST_PROGRAM , TRIM(REGEXP_SUBSTR(DPM.STAGE, '[^,]+', 1, LEVEL)) AS STAGE_true FROM DRB_PARAMETER_MAPPING DPM LEFT JOIN WAT_PARAMETER wp ON DPM.PARAMETER_NAME = wp.NAME -- 确认关联条件 AND dpm.LIMIT_FILE = wp.SPECFILE_NAME CONNECT BY LEVEL <= REGEXP_COUNT(DPM.STAGE, ',') + 1 AND PRIOR DPM.PRODUCT_ID = DPM.PRODUCT_ID AND PRIOR DPM.FAB = DPM.FAB AND PRIOR DPM.TEST_PROGRAM = DPM.TEST_PROGRAM AND PRIOR DPM.PARAMETER_NAME = DPM.PARAMETER_NAME AND PRIOR WP.WAT_PARAMETER_ID = WP.WAT_PARAMETER_ID AND PRIOR DPM.PARAMETER_MAPPING = DPM.PARAMETER_MAPPING AND PRIOR DPM.LIMIT_FILE = DPM.LIMIT_FILE AND PRIOR SYS_GUID() IS NOT NULL REGEXP_SUBSTR改成json的形式
<think>嗯,用户给了我一个SQL查询,想让我把里面的REGEXP_SUBSTR部分改成JSON形式。首先,我需要仔细看一下这个查询的结构。看起来他们是在处理DRB_PARAMETER_MAPPING表中的STAGE字段,这个字段可能有多个值用逗号分隔,现在用正则表达式拆分成多行。用户希望用JSON的方式来解析这个字段,而不是用正则表达式。
首先,我需要确认数据库的版本是否支持JSON函数,比如Oracle 12c及以上才有JSON_TABLE。然后,原查询里用了CONNECT BY LEVEL来做行转列,现在如果用JSON的话,可能需要用JSON_TABLE来处理。但原来的拆分逻辑是用逗号分隔,所以可能需要先将STAGE字段转换成JSON数组格式,比如用方括号包围,逗号分隔,然后使用JSON_TABLE来解析。
接下来,我需要检查原来的REGEXP_SUBSTR拆分是否正确。原代码中的TRIM(REGEXP_SUBSTR(DPM.STAGE, '[^,]+', 1, LEVEL))是用来拆分每个逗号分隔的部分,并且去除空格。如果用JSON的话,可能需要确保每个元素都是有效的JSON值,可能需要处理空格和引号的问题。
然后,替换REGEXP_SUBSTR为JSON形式的话,可能需要用JSON_TABLE来替代CONNECT BY的部分。例如,将STAGE字段转换成JSON数组,然后用JSON_TABLE来展开。但需要注意,原查询中的CONNECT BY有多个PRIOR条件,这些可能需要调整,因为JSON_TABLE不会像CONNECT BY那样处理层级关系,可能需要用CROSS JOIN来代替。
另外,用户提到将REGEXP_SUBSTR改成JSON形式,可能需要修改STAGE字段的存储方式,或者动态地将其转换为JSON数组。例如,使用替换函数在STAGE字段前后加上方括号,并用双引号包围每个元素,确保是合法的JSON格式。然后使用JSON_TABLE来提取每个元素。
还要注意,原查询中的CONNECT BY带有多个PRIOR条件,这些可能是为了防止循环连接,但使用JSON_TABLE后,这些条件可能不再需要,因为JSON_TABLE会直接展开数组为行。同时,PRIOR SYS_GUID()的部分可能是为了生成唯一值,但使用JSON方法后,这部分可能可以省略。
最后,测试修改后的查询,确保拆分后的STAGE_true列结果与原方法一致,没有多余的空格或格式问题,并且性能是否可接受。可能还需要处理STAGE字段中的特殊字符,比如引号或逗号,确保JSON转换的正确性。</think>让我们分步骤解析这个需要检查参数的SQL查询,并分析如何将`REGEXP_SUBSTR`改为JSON格式:
一、**原查询核心功能**
1. 通过`CONNECT BY`实现行转列(将逗号分隔的STAGE字段拆分为多行)
2. 使用`REGEXP_SUBSTR`拆分字符串
3. 通过`DISTINCT`保证唯一性
4. 多表关联验证参数映射
二、**需要重点检查的参数**
```sql
/* 关键校验点 */
AND dpm.LIMIT_FILE = wp.SPECFILE_NAME -- 规格文件名称一致性 ✔️
AND DPM.PARAMETER_NAME = wp.NAME -- 参数命名映射准确性 ✔️
AND PRIOR DPM.PRODUCT_ID = DPM.PRODUCT_ID -- 产品ID级联校验 ✔️
```
三、**JSON改造方案**
```sql
SELECT DISTINCT
/* 原有字段保持不变 */
JSON_VALUE(TRIM(stage_val), '$') AS STAGE_true -- 提取JSON值 ✔️
FROM DRB_PARAMETER_MAPPING DPM
LEFT JOIN WAT_PARAMETER wp
ON DPM.PARAMETER_NAME = wp.NAME
AND dpm.LIMIT_FILE = wp.SPECFILE_NAME
CROSS JOIN JSON_TABLE( -- 替代CONNECT BY ✔️
'[ "' || REPLACE(DPM.STAGE, ',', '","') || '" ]', -- 构造JSON数组
'$[*]' COLUMNS (stage_val VARCHAR2(4000) PATH '$')
)
```
四、**改造注意事项**
1. **数据清洗**:使用`REPLACE`保证JSON格式合法
$$ STAGE\_clean = REPLACE(DPM.STAGE, '"', '\"') $$
2. **格式转换**:构造标准JSON数组结构
$$ \text{输入:"A,B,C" → 转换:["A","B","C"]} $$
3. **性能优化**:`CROSS JOIN JSON_TABLE`比递归查询效率更高
五、**验证要点**
```sql
/* 验证维度 */
WHERE 1=1
AND JSON_ISVALID('[ "'||REPLACE(STAGE,',','","')||'" ]') = 1 -- 格式有效性检查 ✔️
AND TRIM(stage_val) IS NOT NULL -- 空值过滤 ✔️
```
六、**新旧方案对比**
| 特性 | REGEXP\_SUBSTR方案 | JSON\_TABLE方案 |
|---------------|-------------------|-----------------------|
| 可读性 | 中(需理解正则) | 高(结构清晰) |
| 扩展性 | 低 | 高(支持多层嵌套) |
| 特殊字符处理 | 需手动转义 | 自动转义 |
| 版本要求 | Oracle 10g+ | Oracle 12c+ |
建议配合`DBMS_METADATA.GET_DDL`获取表结构,验证字段长度是否匹配JSON解析后的数据长度。
/* * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ #include <string.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_log.h" #include "esp_check.h" #include "bsp_board.h" #include "nvs_flash.h" #include "nvs.h" #include "settings.h" static const char *TAG = "settings"; #define NAME_SPACE "sys_param" #define KEY "param" static sys_param_t g_sys_param = {0}; static const sys_param_t g_default_sys_param = { .need_hint = 1, .sr_lang = SR_LANG_EN, .volume = 70, // default volume is 70% }; static esp_err_t settings_check(sys_param_t *param) { esp_err_t ret; ESP_GOTO_ON_FALSE(param->sr_lang < SR_LANG_MAX, ESP_ERR_INVALID_ARG, reset, TAG, "language incorrect"); ESP_GOTO_ON_FALSE(param->volume <= 100, ESP_ERR_INVALID_ARG, reset, TAG, "volume incorrect"); return ret; reset: ESP_LOGW(TAG, "Set to default"); memcpy(&g_sys_param, &g_default_sys_param, sizeof(sys_param_t)); return ret; } esp_err_t settings_read_parameter_from_nvs(void) { nvs_handle_t my_handle = 0; esp_err_t ret = nvs_open(NAME_SPACE, NVS_READONLY, &my_handle); if (ESP_ERR_NVS_NOT_FOUND == ret) { ESP_LOGW(TAG, "Not found, Set to default"); memcpy(&g_sys_param, &g_default_sys_param, sizeof(sys_param_t)); settings_write_parameter_to_nvs(); return ESP_OK; } ESP_GOTO_ON_FALSE(ESP_OK == ret, ret, err, TAG, "nvs open failed (0x%x)", ret); size_t len = sizeof(sys_param_t); ret = nvs_get_blob(my_handle, KEY, &g_sys_param, &len); ESP_GOTO_ON_FALSE(ESP_OK == ret, ret, err, TAG, "can't read param"); nvs_close(my_handle); settings_check(&g_sys_param); return ret; err: if (my_handle) { nvs_close(my_handle); } return ret; } esp_err_t settings_write_parameter_to_nvs(void) { ESP_LOGI(TAG, "Saving settings"); settings_check(&g_sys_param); nvs_handle_t my_handle = {0}; esp_err_t err = nvs_open(NAME_SPACE, NVS_READWRITE, &my_handle); if (err != ESP_OK) { ESP_LOGI(TAG, "Error (%s) opening NVS handle!\n", esp_err_to_name(err)); } else { err = nvs_set_blob(my_handle, KEY, &g_sys_param, sizeof(sys_param_t)); err |= nvs_commit(my_handle); nvs_close(my_handle); } return ESP_OK == err ? ESP_OK : ESP_FAIL; } sys_param_t *settings_get_parameter(void) { return &g_sys_param; }
这段代码是一个设置参数的示例代码。它使用 ESP-IDF(Espressif IoT Development Framework)和 NVS(Non-volatile Storage)来读取和保存系统参数。
首先,我们定义了一些常量和变量。其中,TAG 是用于在日志中标识相关的日志消息的字符串。NAME_SPACE 是用于在 NVS 中保存参数的命名空间。KEY 是参数在 NVS 中的键名。
然后,我们定义了一个 sys_param_t 结构体类型的全局变量 g_sys_param,用于存储系统参数。我们还定义了一个 g_default_sys_param 常量,用于存储默认的系统参数。
接下来,我们定义了一个 settings_check 函数,用于检查系统参数的合法性。在函数中,我们检查了语言类型和音量值是否在有效范围内。如果参数不合法,则将系统参数重置为默认值。
然后,我们定义了 settings_read_parameter_from_nvs 函数,用于从 NVS 中读取系统参数。首先,我们打开 NVS,并检查是否找到了保存的参数。如果没有找到,则将系统参数设置为默认值,并调用 settings_write_parameter_to_nvs 函数将默认值保存到 NVS 中。如果找到了保存的参数,则从 NVS 中读取参数,并进行合法性检查。
接下来,我们定义了 settings_write_parameter_to_nvs 函数,用于将系统参数保存到 NVS 中。首先,我们调用 settings_check 函数对系统参数进行合法性检查。然后,我们打开 NVS,并将系统参数写入 NVS 中。
最后,我们定义了 settings_get_parameter 函数,用于获取当前的系统参数。
以上是一个简单的示例代码,用于读取和保存系统参数到 NVS 中。具体的使用方式和调用逻辑可能根据实际需求而有所不同。如果你需要更详细的说明,请告诉我。
阅读全文
相关推荐

















