变量定义为参考表的列类型,但未在Oracle PL SQL中计算或初始化



我在旧代码中有一个变量'v_bas_unused_commt',我正在尝试重新编写,如以下旧过程的开始。

CREATE OR REPLACE PROCEDURE USB."BAS2_WIRES_SEG" (v_run_date number default 0)
 IS
v_bas_unused_commt  WIRES_DATA.bas_unused_commt%TYPE;
--WIRES_DATA is table getting updated by this proc

问题是:它在带有变量的proc内部没有做任何事情:'v_bas_unused_commt'(即,除了通过作为输入作为输入,根本没有使用此变量。(然后将其传递给函数作为作为参数计算以下字段:

v_bas_eb_expected_loss := bas2_el_calc (rec.CUR_BOOK_BAL,v_BAS_UNUSED_COMMT,v_BAS_PD,v_BAS_LGD,V_BAS_EAD);
--look at input 2.

我想确认重写此代码时,我是否应该使用0代替v_bas_unused_commt或sth其他?我尝试使用来自表Wires_data的原始列名bas_unused_commt代替V_BAS_UNUSED_COMMT,但是该列具有值,并且在计算后为V_BAS_EB_EXT_LOSS提供了不同的值。但是,当我写

v_bas_unused_commt  WIRES_DATA.bas_unused_commt%TYPE;
and passed v_bas_unused_commt as input, same as old code, differences disappeared.

我认为这可能是因为V_BAS_UNUSED_COMMT始终是0,但想在我在最终过程中替换之前确认

事先感谢您的帮助!

声明但未初始化的变量将具有零值(与零不同(,除非程序中的某个地方归因于它。通过这样的简单测试,您可以在调用函数之前立即对其进行验证:

FSITJA@db01 2019-06-25 12:01:23> create table t1(col1 varchar2(8));
Table created.
FSITJA@db01 2019-06-25 12:01:23> create or replace procedure fsitja.pr_test is
  2  v_empty t1.col1%type;
  3  begin
  4    if v_empty is null then
  5      dbms_output.put_line('I AM NULL');
  6    end if;
  7  end;
  8  /
Procedure created.
FSITJA@db01 2019-06-25 12:01:23> begin fsitja.pr_test; end;
  2  /
I AM NULL
PL/SQL procedure successfully completed.

您可能应该使用null。但是,请在进行更改之前检查它的确已经通过了无效。

最新更新