将 select 结果放入 ksh 变量中
Put select result in a ksh variable
使用 sql 加载程序,我知道我可以在我的 ctl 文件中引用一个 ksh 变量。例如我可以写
LOAD DATA
INFILE '$PATH_IN_KSH/my_file.dat'
...
我想添加这样的 WHEN 子句
WHEN (125:125) = '$P_NUMBER'
P_NUMBER 将具有 table 中一列的值,我将使用 select 查询检索该列。
可以吗?从具有 select 的列中检索一个值,并以某种方式将其放入 ksh 变量中,以便 ctl 文件可以看到它。 (有 sql 加号的东西?)
谢谢
作为基本大纲,您可以 运行 SQL*加上 heredoc 来执行查询,并将输出分配给变量:
P_NUMBER=`sqlplus -s /nolog <<!EOF
connect username/password
whenever sqlerror exit failure
set pagesize 0
set feedback off
select your_value from your_table where your_key = 'something';
exit 0
!EOF`
括在反引号中会将结果分配给变量。 $P_NUMBER 然后将保留您的查询获得的任何值(或者如果凭据错误,则显示错误消息)。如果您确定查询将 return 正好是一个结果,这会有所帮助。在尝试使用变量之前,您还可以使用 $?
测试 return 代码以查找错误。
包括 -s
标志、关闭反馈并将页面大小设置为零共同抑制所有噪音,因此您只得到结果而不必去除横幅、标题等。
最后我使用了 /nolog
并将 connect
语句放在 heredoc 中,这样凭据就不会出现在进程列表中,这是一个 often-overlooked 安全问题。如果您不想这样做并将凭据设置为 sqlplus username/passwd
,您可以添加 -l
标志,以便它只尝试登录一次;否则,如果由于某种原因登录失败,它将尝试使用 heredoc 的其余部分作为进一步的凭据,并且可能会被短脚本挂断。
使用 sql 加载程序,我知道我可以在我的 ctl 文件中引用一个 ksh 变量。例如我可以写
LOAD DATA
INFILE '$PATH_IN_KSH/my_file.dat'
...
我想添加这样的 WHEN 子句
WHEN (125:125) = '$P_NUMBER'
P_NUMBER 将具有 table 中一列的值,我将使用 select 查询检索该列。
可以吗?从具有 select 的列中检索一个值,并以某种方式将其放入 ksh 变量中,以便 ctl 文件可以看到它。 (有 sql 加号的东西?)
谢谢
作为基本大纲,您可以 运行 SQL*加上 heredoc 来执行查询,并将输出分配给变量:
P_NUMBER=`sqlplus -s /nolog <<!EOF
connect username/password
whenever sqlerror exit failure
set pagesize 0
set feedback off
select your_value from your_table where your_key = 'something';
exit 0
!EOF`
括在反引号中会将结果分配给变量。 $P_NUMBER 然后将保留您的查询获得的任何值(或者如果凭据错误,则显示错误消息)。如果您确定查询将 return 正好是一个结果,这会有所帮助。在尝试使用变量之前,您还可以使用 $?
测试 return 代码以查找错误。
包括 -s
标志、关闭反馈并将页面大小设置为零共同抑制所有噪音,因此您只得到结果而不必去除横幅、标题等。
最后我使用了 /nolog
并将 connect
语句放在 heredoc 中,这样凭据就不会出现在进程列表中,这是一个 often-overlooked 安全问题。如果您不想这样做并将凭据设置为 sqlplus username/passwd
,您可以添加 -l
标志,以便它只尝试登录一次;否则,如果由于某种原因登录失败,它将尝试使用 heredoc 的其余部分作为进一步的凭据,并且可能会被短脚本挂断。