2

我有一个表临时(文本 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`

但是在执行getting

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);'

在文本栏中。

在此先感谢您的帮助..

4

2 回答 2

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);'"
于 2013-10-09T11:48:44.683 回答
1

请记住,这|是批处理中的特殊符号(连接两个进程的管道符号。许多特殊字符也是如此,因此您需要格外小心。据我所知,您是对的。

现在要在文本列中插入单引号,您需要对它们进行转义:'''inserta('''将插入'inserta('列中:

第一个单引号将启动一个 SQL 字符串。接下来的两个将表示“作为字符串一部分的单引号”。

因此,在普通 SQL 中,所需的代码将如下所示:

 '''inserta(''li_count_312''||li_count);'''

为此,请复制任何现有的单引号,然后将整个内容用单引号括起来。

在您的脚本中,您需要编写

 SET "p1='''inserta(''^|^| " 
 ...
于 2013-10-09T11:47:02.270 回答