在批处理文件中拆分以逗号分隔的字符串并在循环中调用 sqlplus 函数

Posted

技术标签:

【中文标题】在批处理文件中拆分以逗号分隔的字符串并在循环中调用 sqlplus 函数【英文标题】:Split string separated by comma in a batch file and call a sqlplus function in the loop 【发布时间】:2021-12-24 03:10:56 【问题描述】:

我正在尝试拆分用逗号分隔的字符串,然后使用每个拆分的字符串调用 sql 函数。要拆分的字符串的长度是可变的。

我有这个代码:

setlocal enabledelayedexpansion
@echo off
set CCVs="0008123123,000815432123"
for /F "delims=," %%a in ("%CCVs%") do (
    SQLPLUS -S -L %DBCONN% @%~dp0generate.sql %%a
)

但我看到循环使用参数“0008123123 000815432123”调用 SQLPLUS 函数,而不是两次,一次是字符串 0008123123,第二次是 000815432123

【问题讨论】:

我建议您像 set "CCVs=0008123123,000815432123" 这样定义您的变量,以免在其值数据中包含不必要的双引号。 【参考方案1】:

您需要使用标准的 FOR 命令。也不要养成为变量分配引号的习惯。在编写批处理文件方面,这是一种不好的做法。最好的做法是使用它们来包围赋值以保护特殊字符并防止尾随空格被分配给该值。

@echo off
set "CCVs=0008123123,000815432123"
for %%a in (%CCVs%) do (
    SQLPLUS -S -L %DBCONN% @%~dp0generate.sql %%a
)

【讨论】:

以上是关于在批处理文件中拆分以逗号分隔的字符串并在循环中调用 sqlplus 函数的主要内容,如果未能解决你的问题,请参考以下文章

我想拆分用逗号分隔的字符串并在 SQL Server 中另存为新行 [重复]

将分隔字符串拆分为存储过程中的变量[重复]

mysql中将一列以逗号分隔的值分割成多列显示?

在c#中拆分逗号分隔多个字符串[重复]

使用逗号分隔符将单个 CSV 列批量转换为多个

逗号分隔值循环使用硬编码值但不使用参数值