переменная, определенная как тип столбца справочной таблицы, но не рассчитанная или не инициализированная в oracle pl sql - PullRequest
0 голосов
/ 25 июня 2019

У меня есть переменная '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 или что-то еще?Я попытался использовать исходное имя столбца BAS_UNUSED_COMMT из таблицы WIRES_DATA вместо v_BAS_UNUSED_COMMT, но у этого столбца есть значения, и после вычисления он приводит к другим значениям для v_bas_eb_expected_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, но хотел подтвердить, прежде чем заменить его в окончательной процедуре

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 25 июня 2019

Переменная, объявленная, но не инициализированная, будет иметь значение NULL (отличное от нуля), если только где-то в процедуре ей не приписано другое значение.С помощью простого теста, подобного этому, вы можете проверить его прямо перед вызовом функции:

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.Но, пожалуйста, убедитесь, что он действительно проходит NULL, прежде чем вносить изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...