将 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 的其余部分作为进一步的凭据,并且可能会被短脚本挂断。