我有一个表temp(text varchar2(500))。想要通过批处理脚本在文本列中插入此特定类型的数据:'inserta('li_count_312'||li_count);'
。
在我的批处理脚本中,我尝试了如下
SET "p1='inserta(^|^| "
SET "p2=%var%_%insertat% "
SET "p3=%p1%''^|^|%p2%^|^| ' ' "
SET "p4=^|^|%var% "
SET "p5=%p3%%p4% "
SET "p6=%p5%); ' "
SET TL=%p6%
echo. %TL%
echo INSERT INTO temp VALUES(%TL%); >> temp1.sql`
但在执行
时C:\Windows\system32>echo INSERT INTO temp VALUES('inserta( || '' || li_count_312 || ' ' || li_count ); ' ); 1>>temp1.sql
INSERT INTO temp VALUES('inserta(
管道后面的所有部分都没有显示。我想要这个数据
'inserta('li_count_312'||li_count);'
在文本栏中。
先谢谢你的帮助..
答案 0 :(得分:1)
请记住,|
是批处理中的特殊符号(连接两个进程的管道符号。The same goes for a lot of special characters,所以你需要格外小心。据我所知,你得到了好吧,但是。
现在要在文本列中插入单引号,您需要转义它们:'''inserta('''
会将'inserta('
插入到列中:
第一个单引号将启动一个SQL字符串。接下来的两个意思是“单引号作为字符串的一部分”。
因此在纯SQL中,所需的代码如下所示:
'''inserta(''li_count_312''||li_count);'''
要获得此功能,请复制任何现有的单引号,然后将整个内容用单引号括起来。
在您的脚本中,您需要编写
SET "p1='''inserta(''^|^| "
...
答案 1 :(得分:1)
您应该使用延迟扩展,因为您可以无需插入符号来定义字符串,并且扩展也是安全的。
setlocal EnableDelayedExpansion
SET "p1='inserta(|| "
SET "p2=!var!_!insertat! "
SET "p3=!p1!''||!p2!|| ' ' "
SET "p4=||!var! "
SET "p5=!p3!!p4! "
SET "p6=!p5!); ' "
SET "TL=!p6!"
echo. !TL!
echo INSERT INTO temp VALUES(!TL!); >> temp1.sql`
将其简化为
setlocal EnableDelayedExpansion
SET "TL=INSERT INTO temp VALUES('inserta('li_count_312'||li_count);'"