首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量定义为引用表的列类型,但未在oracle pl sql中进行计算或初始化。

变量定义为引用表的列类型,但未在oracle pl sql中进行计算或初始化。
EN

Stack Overflow用户
提问于 2019-06-26 00:44:50
回答 1查看 28关注 0票数 0

我在旧代码中有一个变量'v_bas_unused_commt‘,我正在尝试重写它,如下所示,在旧过程的BEGIN语句之前。

代码语言:javascript
复制
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‘做任何事情(即,除了作为输入传递之外,根本没有使用这个变量)。然后将其作为参数传递给函数,用于计算以下字段:

代码语言:javascript
复制
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或其他东西吗?我尝试使用来自表WIRES_DATA的原始列名BAS_UNUSED_COMMT来代替v_BAS_UNUSED_COMMT,但是该列具有值,并且它在计算后导致v_bas_eb_expected_loss的值不同。然而,当我写到

代码语言:javascript
复制
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,但我想在最终过程中替换它之前进行确认

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-26 03:04:48

已声明但未初始化的变量将具有空值(不同于零),除非在过程中的某个地方为其指定了不同的值。有了这样一个简单的测试,您就可以在调用函数之前验证它:

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56758629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档