验证是否从光标中提取变量的命令

问题描述 投票:0回答:1

有没有一种方法/命令可以在运行包时验证它是否从游标中提取变量?

我有一个正在运行游标的包,我手动运行该语句并提取我需要的内容。我运行该包,但它没有拉动变量。

CURSOR dbvalue_cur  IS   
SELECT ABC_ACCOUNT_A, 
      ABC_ACCOUNT_B, 
      ABC_A_PREM_LOC, 
      ABC_A_SERV_CLASS, 
      ABC_B_PREM_LOC, 
      ABC_B_SERV_CLASS, 
      ABC_A_CUST_COUNT, 
      ABC_A_REP_CON, 
      ABC_B_CUST_COUNT, 
      ABC_B_REP_CON, 
      ABC_A_ASVC, 
      ABC_B_ASVC, 
      ABC_REV_IND
FROM DEF, ABC
WHERE utrglcl_code = ABC_glcl_code
 AND utrglcl_code  = d_GLCLASS_CODE;

dbValue            dbvalue_cur%ROWTYPE;
BEGIN  
  d_returnFieldsJSON := '';
  
  U$_OL_PROPERTY_DB.returnFieldsTable   := U$_OL_PROPERTY_DB.emptyReturnFieldsTable;
  d_GLCLASS_CODE    := NVL(U$_OL_PROPERTY_DB.getPageCacheValue('UTRGLCL_CODE'), 'NULL');
   
/*******************************************
 ** VALIDATION LOGIC START
 *******************************************/
Open dbvalue_cur;
FETCH dbvalue_cur INTO dbValue;
 

我尝试手动运行游标语句。

oracle plsql
1个回答
0
投票

您说您手动运行了

SELECT
语句,它返回了一些行。这意味着
WHERE
子句让它发生了。看起来像

WHERE utrglcl_code = ABC_glcl_code
  AND utrglcl_code = d_GLCLASS_CODE;

这意味着

utrglcl_code
必须等于
ABC_glcl_code
d_GLCLASS_CODE

我们不知道

ABC_glcl_code
的价值(你没有发布那段代码),而
d_GLCLASS_CODE
等于
NVL(U$_OL_PROPERTY_DB.getPageCacheValue('UTRGLCL_CODE'), 'NULL')

您确定

getPageCacheValue
返回了有效值吗?不过看起来很奇怪;您正在应用
NVL
函数,如果
getPageCacheValue
返回
null
,则将
d_GLCLASS_CODE
设置为
'NULL'
,一个字符串。

如果我是你,我会检查这两个变量发生了什么。最简单的方法就是显示它们;启用服务器输出,然后

<snip>
dbms_output.put_line('ABC_glcl_code  = ' || ABC_glcl_code);
dbms_output.put_line('d_GLCLASS_CODE = ' || d_GLCLASS_CODE);

Open dbvalue_cur;
FETCH dbvalue_cur INTO dbValue;

你看到了什么?当您将值(显示的)放入

select
语句的
where
子句时会发生什么?

© www.soinside.com 2019 - 2024. All rights reserved.