-- ============================================================================= -- 脚本:01-device-api-pull-precheck.sql -- 用途:安装设备 API 拉取基础表之前,检查现有表结构是否满足升级条件。 -- 性质:只读脚本,不会修改表结构和业务数据,可以重复执行。 -- 执行时机:执行 02-device-api-pull-upgrade.sql 之前。 -- -- 重点检查: -- 1. device_collect_task.method 当前使用了哪些值,避免新增 API 类型与旧值冲突; -- 2. device_collect_task.id 和 device_device.id 是否都有主键; -- 3. 两个主键字段的数据类型是否分别为 INTEGER/INT 和 BIGINT; -- 4. 四张 DEVICE_COLLECT_API_* 表是否已经存在。 -- -- 判断方法: -- - 任一 SQL 报错时,不要执行 02,先确认当前用户和 Schema 是否正确; -- - 第四组查询返回 0 行,表示四张 API 拉取表尚未创建; -- - 第四组查询有返回,表示可能执行过升级,应先运行 03 验证,不要直接重跑 02。 -- ============================================================================= -- 第 1 组:查看采集任务 method 的现有取值及任务数量。 SELECT method, COUNT(*) AS task_count FROM device_collect_task GROUP BY method ORDER BY method; -- 第 2 组:确认两张被引用的旧表都有主键,每张表应各返回一条统计记录。 SELECT table_name, COUNT(*) AS pk_count FROM user_constraints WHERE LOWER(table_name) IN ('device_collect_task','device_device') AND constraint_type='P' GROUP BY table_name ORDER BY table_name; -- 第 3 组:核对外键关联字段的数据类型、长度和是否允许为空。 SELECT table_name,column_name,data_type,data_length,data_precision,data_scale,nullable FROM user_tab_columns WHERE LOWER(table_name) IN ('device_collect_task','device_device') AND LOWER(column_name)='id' ORDER BY table_name; -- 第 4 组:检查目标表是否已存在。首次升级时应返回 0 行。 SELECT table_name FROM user_tables WHERE LOWER(table_name) IN ('device_collect_api_credential','device_collect_api_config','device_collect_api_checkpoint','device_collect_api_run');