有没有一种方法/命令可以在运行包时验证它是否从游标中提取变量?
我有一个正在运行游标的包,我手动运行该语句并提取我需要的内容。我运行该包,但它没有拉动变量。
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;
我尝试手动运行游标语句。
您说您手动运行了
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
子句时会发生什么?