打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PL/SQL开发中赋值为NULL的处理
      上周开始了这个Project的第一个task,整体逻辑简单来说就是从visit中取到三个字段的值,然后分别作为条件去Collection Plan中找到匹配的Code,把这些Code,再去gl_code_combination中获取ccid匹配Material Account,最后如果存在匹配的Accounting Class则做相应的处理,返回这个值,如果不存在则直接返回NULL。Task的逻辑比较清楚,细节也不详述,只是在coding的过程中碰到一个问题,在select into某个变量的时候,有时候select的column为null值,所以into的时候也是一个NULL,这时候如果不做处理,在compile 的时候就报ORA-01403 no data found的错误,为了处理这个自己试验过三个办法:
 1.首先将某个column的count值活的,判断count的值是否为0,如果不为0,然后在执行execute的操作。
 SELECT COUNT(wac.class_code)
        INTO lc_wac_code_cnt        
        FROM wip_accounting_classes wac
       WHERE organization_id = ln_org_id
         AND material_account =
             (SELECT gcc.code_combination_id
                FROM gl_code_combinations gcc
               WHERE segment2 = lc_account_code
                 AND segment3 = lc_visit_dept_code
                 AND segment4 = lc_cust_code);

  IF lc_wac_code_cnt <> 1 THEN
 SELECT wac.class_code
            INTO lc_wac_code
            FROM wip_accounting_classes wac
           WHERE organization_id = ln_org_id
             AND material_account =
                 (SELECT gcc.code_combination_id
                    FROM gl_code_combinations gcc
                   WHERE segment2 = lc_account_code
                     AND segment3 = lc_visit_dept_code
                     AND segment4 = lc_cust_code);
END IF;
这种方法其实用的挺多的,这样的判断有时候除了这样的情况,还有其他的情况需要判断。不过不足就是这样会增加code的数量,不是最简便的。而且,如果需要多处判断的话,不是很方便。
2.针对多处可能出现判断null值的情况,于是写了一个简单的判断函数。
FUNCTION getvalue(p_strsql IN VARCHAR2) RETURN VARCHAR2 AS
    /*
    * Name  : getvalue
    * Description      : Get the value after executing a sql statment
    *                             and return the value 
    * Parameters : 
                                         p_visit_id         varhcar2,
    * 
    * Returns :                   varchar2
    * 
    */
    lc_value VARCHAR2(200);
  BEGIN
    dbms_output.put_line(p_strsql);
    EXECUTE IMMEDIATE p_strsql
      INTO lc_value;
    RETURN lc_value;
  EXCEPTION
    WHEN OTHERS THEN
      RETURN NULL;
  END getvalue;
这个函数在以一条sql语句作为参数传入,返回的是sql语句执行的结果,如果没有查到值,那么会返回null,当把null值赋给了变量,那么接下来就可以直接判断变量是否为null,这样做可以做到多处需要判断的时候重复使用这段函数,但是不足是,在构造sql的时候,因为一些变量问题,单引号变得很繁琐

3.在声明变量的时候直接先赋予初始值NULL,这个我没有在我这次写的程序里面,但是做过测试,好像也是没有问题的。
declare
lc_test    varchar2(10) := NULL;
begin
select aaa into lc_test from  test where rec_id = 1;
if  lc_test is null then
dbms_output.put_line ('aaaaaaaaaa');
else
dbms_output.put_line ('bbbbbbbbbb');
end if;
end;

在整个程序的实现过程中,还碰到很多小的问题。此篇就仅对null的处理进行总结。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ORACLEEXPIMP导入导出数据解决如何导出空表
精妙SQL语句(ora)
T-SQL中的ISNULL和IS NULL
access在哪里可以设主键
日常测试工作中,有哪些必须知道的 SQL 语句?
sql server 自定义函数的使用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服