【聚杰网PL/SQL】PL/SQL Developer 的一个 bug
PL/SQL Developer 是我做 Oracle 开发最常用的工具,刚刚发现一个低级的 bug。下面我描述一下它:
测试的 Oracle 版本为:
SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod PL/SQL Release 10.2.0.1.0 - Production CORE 10.2.0.1.0 Production TNS for 32-bit Windows: Version 10.2.0.1.0 - Production NLSRTL Version 10.2.0.1.0 - Production |
先建一个包和包体:
SQL> create or replace package pkg_test is 2 3 procedure prc_xx( v_varchar IN VARCHAR2 DEFAULT 'adsf'); 4 5 end pkg_test; 6 / 程序包已创建。 SQL> create or replace package body pkg_test is 2 procedure prc_xx( v_varchar IN VARCHAR2 DEFAULT 'adsf') 3 is 4 begin 5 dbms_output.put_line('v_varchar: '||v_varchar); 6 end; 7 end pkg_test; 8 / 程序包主体已创建。 |
过程 prc_xx 的入参是带默认值的,对,就是测试这个。我们在 SQL*PLUS 里执行一下,没问题:
SQL> exec pkg_test.prc_xx v_varchar: adsf PL/SQL 过程已成功完成。 SQL> exec pkg_test.prc_xx('yuechaotian'); v_varchar: yuechaotian PL/SQL 过程已成功完成。 |
换成 PL/SQL Developer 里的“test”功能看看呢?就不行啦,没有输出结果。经过测试,这个入参 v_varchar 值为 null:
SQL> create or replace package body pkg_test is 2 3 procedure prc_xx( v_varchar IN VARCHAR2 DEFAULT 'adsf') 4 is 5 begin 6 dbms_output.put_line('v_varchar'||v_varchar); 7 if v_varchar is null then 8 dbms_output.put_line('null'); 9 else 10 dbms_output.put_line('not null'); 11 end if; 12 end; 13 end pkg_test; 14 / 程序包主体已创建。 |
PL/SQL Developer 里的测试结果为:
v_varchar: null |
但如果是另写一个过程来调用 prc_xx,那么就可以使用默认值 'adsf' 了。真是奇怪,只能把原因归结为 PL/SQL Developer 的 bug。
以下相关文章您是否也应该阅读一下
无相关信息










