最近需要用到比较多的动态SQL,发现一个问题,就是在处理数值类型的数据的时候有一点麻烦。比如Insert 操作,以前没有使用动态SQL的时候,由一个数值型传入参数负责接收数据,然后一个简单的Insert语句就可以搞定了,不用考虑这个值是有具体的值还是为空。但是如果使用动态SQL,需要拼凑字符串,这个数值型的值就不能为空了,一旦为空,拼凑出来的语句就类似:      其中--column2 是数值型      insert into table (column1,column2) values ('aaa',)这样就会报错了。解决方法有两种,一、将数值变量处理一下,nvl(变量,0),这样就能保证所拼凑出来的语句正确;
                二、但是如果业务规则不允许将空的值转换为0,那第一种方法就不能用了,只能在拼凑语句之前就判断该变量是否为空,如果唯恐,SQL语句中就不要包含于这个变量、字段相关的字符串了。第二种方法是可行的,但是我觉得比较麻烦,不知道各位有没有什么更简便的方法。

解决方案 »

  1.   

    把column2改为可空null.
    insert into table (column1,column2) values ('aaa',null) 
      

  2.   


    这个也是不行的,虽然column2可以设置为允许空值,但是在拼凑出来的SQL语句中还是不能接受向一个数值型字段插入null值,即insert into table (column1,column2) values ('aaa',null) 这个我也实验过,同样抱错,虽然在SQL*PLUS里面直接运行是可以的