这是我正在运行的删除脚本的后备脚本。下面是我用来生成插入语句的查询。
select 'insert into remark_element(ELEMENTID,
REMARKID,
VALUE,
POSITION,
INFO_TYPE,
SCRIPTID)
values('||elementid||',
'||remarkid||',
'''||nvl(value,'null')||''',
'||position||',
'||nvl(info_type,null)||',
'||nvl(scriptid,null)||''||')'
from remark_element
where elementid in(....
以下是该查询的结果:
insert into remark_element(ELEMENTID,
REMARKID,
VALUE,
POSITION,
INFO_TYPE,
SCRIPTID)
values(29650520,
20263860,
'0/877-426-6251-A',
1,,);
运行该程序得到ORA-00936:缺少表达式,因为空的info_type和scriptid字段,它们都是数字并且允许为空。我需要生成的查询来说明
insert into remark_element(ELEMENTID,
REMARKID,
VALUE,
POSITION,
INFO_TYPE,
SCRIPTID)
values(29650520,
20263860,
'0/877-426-6251-A',
1,
null,
null);
当信息类型和脚本ID为空时。我已尝试执行nvl(信息类型,“空”),但获得ORA-01722:无效的数字为尝试到放一个字符串到一个数字字段.我怎样能操纵这到返回作为null代替,,当这info_type或scriptid是null
6条答案
按热度按时间owfi6suc1#
由于您的输出最终是一个字符串,因此只需使用
to_char
将您的列转换为字符串,使两个nvl
参数都是字符串:t3irkdon2#
@sstan的答案的另一种选择是使用
decode
函数,在混合不同的数据类型时,该函数不像NVL
或coalesce
那样敏感:上述语句检查
info_type
的值,如果该值为null
,则返回'null'
;否则返回检查值本身。cl25kdpy3#
您正在生成代码。我更喜欢使用
coalesce()
,因为它是ANSI标准。第二个参数应该是字符串'null'
,而不是常量null
。4ioopgfo4#
试试这个,为我工作:
当您执行查询和Oracle findnull时,结果为空,但如果使用'null',则将其视为字符串。
因此,用引号将
(info_type,'null')
替换为(info_type,null)
。disho6za5#
您的查询必须如下所示:
lkaoscv76#
开始插入WEBSITES_STATUS(STATUS,HTTP_CODE)值('DOWN',(nvl('$b','无法识别错误。请通过浏览器手动检查。')));承诺;结束;/