PL/SQL - 避免编译器警告:“已分配值,从未使用过”

PL/SQL - Avoid Compiler warning: "value assigned, never used"

提问人:cartbeforehorse 提问时间:10/25/2023 最后编辑:MT0cartbeforehorse 更新时间:11/3/2023 访问量:81

问:

正如您可能已经收集到的那样,下面的代码不是真实的 - 但它突出了我的观点。

PROCEDURE Do_Some_Dynamic_Stuff (
    sql_  IN VARCHAR2 )
IS
    cur_ INTEGER := Dbms_Sql.Open_Cursor;
    res_ NUMBER;
BEGIN
    Dbms_Sql.Parse (cur_, sql_, dbms_sql.native);
    res_ := Dbms_Sql.Execute (cur_);
    -- ...
    -- > use cursor cur_ in this code to achieve "stuff"
    -- > value `res_` never required by the program
    -- > end program successfully without errors
    -- ...
END Do_Some_Dynamic_Stuff;

编译时,上述过程将生成编译器警告:。Hint: Value assigned to 'res_' never used

我知道警告的含义,突出显示该问题是有意义的,因为当(或)块中定义的变量变得多余/未使用时,它可以帮助整理旧代码。DECLAREIS

我在 SO 上看到过类似的问题,但答案建议降低 Oracle 中的警告级别。问题是:

  1. 我并不总是可以这样做
  2. 我不想关闭警告 - 如前所述,我通常喜欢看到该消息,因为它有助于在声明真正的变量且从未使用过时保持干净的代码

关键是,在上述场景中,变量对于允许代码编译是必需的,但在 .我只是想要一种方法来抑制此警告实例中的消息res_PROCEDURE

当然,解决此问题的一种方法是添加一行毫无意义的代码,例如:

Dbms_Output.Put_Line ('avoid compiler warning: ' || res_);

但这并不是一个非常有说服力的解决方案,无论如何,它都会阻塞你的调试输出等。所以我只是想知道是否有人可以对这只小虫子有一个很好的解决方案。

Oracle PLSQL 编译器-警告 PLSQLDerver

评论

0赞 Littlefoot 10/25/2023
它是什么工具?我创建了您在 Oracle SQL Developer、SQL*Plus 和 TOAD 中发布的过程 - 其中任何一个都没有这样的消息。哪个数据库版本?我在 11g 和 21c 上试过。
0赞 MT0 10/25/2023
无法复制问题小提琴。请编辑问题并包括复制问题所需的步骤,包括:生成警告所需的内容/设置;您如何被告知警告;您正在使用的客户端。SYSTEMSESSION
0赞 MT0 10/25/2023
stackoverflow.com/q/84661/1509264 的可能重复
1赞 Boneist 10/25/2023
听起来您正在使用 PL/SQL Developer,因为我之前在使用它时遇到过类似的警告。你为什么反对在这种情况下看到它?是因为您在代码中使用了多次,并且永远不需要返回的值吗?如果是这样,我将创建一个包含虚拟行的包装过程(例如),然后从您的代码中调用该过程。否则,为什么不直接忽略它呢?在代码中添加注释以解释问题并继续。dbms_sql.executeSELECT 1 INTO res_ FROM dual;
0赞 cartbeforehorse 10/26/2023
@Littlefoot Allround Automations 的 PL/SQL 开发人员。

答:

3赞 Matthieu 10/26/2023 #1

如果您使用的是 pl/sql developer,您可能想尝试一下(摘自 PL/SQL Developer 12.0 用户指南):

要禁止显示警告,可以在该行后添加 -- 忽略注释 这产生了提示。这适用于 Oracle 编译 本章中描述的警告以及 PL/SQL Developer 提示的警告 在第 20.9 章中描述。您可以在 -- 忽略之后添加其他文本 描述情况

请注意,这些注释不能移植到其他 IDE。

评论

1赞 Boneist 10/26/2023
可以确认这适用于我的 PL/SQL 开发人员。只是为了展示RTFM的力量!哈哈
0赞 cartbeforehorse 10/27/2023
@Boneist 把话从我嘴里拿出来!
1赞 cartbeforehorse 10/27/2023
只是为了补充这个正确答案,我用评论进行了测试,它仍然抑制了警告。所以这个词似乎可以在你评论的任何地方!-- lots of text ignore lots of textignore
0赞 Jamie 12/13/2023
这将禁止显示所有警告和错误。尽管我想忽略从未使用过的值提示,但忽略所有内容的风险是不值得的。