plsql developer怎么调试存储过程

如何使用PLSQL存储过程建表

上周,一位顾客来看我。
他在创建存储过程表时仍然遇到问题。
后来我提醒他用EXECUTE IMMEDIATE来解决问题。
你说的场景很相似。

将表创建语句用引号引起来,然后通过 EXECUTE IMMEDIATE 执行它。
这将确保原始SQL语句被正确解析。
尤其是在Oracle这样的数据库中,使用EXECUTE IMMEDIATE不仅可以避免SQL注入风险,还可以让动态SQL变得更加强大。

但是有一个小细节。
CASE 语句使用 WHEN A.RX_POWER IS NULL OR A.RX_POWER = 0。
如果 RX_POWER 是数字类型,则可以同时计算 IS NULL 和 = 0。
但是,如果是字符串类型,则可能需要更改逻辑,例如编写 WHEN A.RX_POWER IS NULL OR TRIM(A.RX_POWER) = ''。

在 ROW_NUMBER() 中,我们使用 PARTITION BY A.DEV_ID ORDER BY A.COLLECT_TIME DESC 进行排序。
如果 DEV_ID 为空或 COLLECT_TIME 排序结果不理想,请考虑添加 WHERE 条件(例如 WHERE A.DEV_ID IS NOT NULL AND A.COLLECT_TIME > '1 9 00-01 -01 ')来过滤掉这些异常值。

最重要的一个是 EXISTS 子查询,用于查找 IAM.T_RES_DEVICE 表的 GD-GZ 区域中的设备。
如果区域突然重命名或者设备丢失,整个建表过程可能会中断。
最好检查 AREA_ID 字段是否仍为“GD-GZ”。

最后,在运行此存储过程之前,请确保当前用户有权访问 gdaniam 服务名称或架构名称。
在上海一家购物中心测试了类似的环境后,@gdaniam 发现。
后面有一些,但在生产 Oracle 1 2 c 中,它应该写为 IAM.T_PERF_PON_DDM@GDANIAM。

您的环境中使用的是哪个版本的 Oracle?之前在深圳一家银行遇到过1 1 g版本,对EXECUTE IMMEDIATE的参数化支持比较严格。

plsql中如何单步调试带参数的存储过程

这是一个陷阱,不信,测试时a和b都要输入值。