使用sqlplus将Oracle DB中的数据提取到文件中必须提供模式名称

时间:2016-12-13 19:42:18

标签: sql oracle bash shell sqlplus

我正在尝试将数据(使用sqlplus)从Oracle DB中提取到文件中,但由于该表的最后一列是默认的空字符串,如何处理它?<​​/ p>

注意:我已经验证了Oracle DB中存在的第3列,如果最后一列不为空,则该脚本在其他表上正常工作,但对于最后一列空表,它失败了。

错误信息是:

[...@... scripts]$ ./myscript.sh
|| TRIM(THIRD_COLUMN) FROM TEST_TABLE
                 *
ERROR at line 3:
ORA-00942: table or view does not exist

相关的sqlplus如下:

My_Table="TEST_TABLE"
sqlplus -s  ${USER}/${PASS}@${HOST} <<EOF
SET PAGESIZE 0
SET COLSEP "|"
...some SET here...
SPOOL $FILE
Select TRIM(FIRST_COLUMN)|| '|'
|| TRIM(SECOND_COLUMN)|| '|'
|| TRIM(THIRD_COLUMN) FROM $My_Table;
SPOOL OFF
EXIT
EOF

如何将最后一列与所有其他列一起拉,特别是当它是空字符串时?有人可以帮忙弄清楚,谢谢。

1 个答案:

答案 0 :(得分:0)

错误表明问题不是列,而是您通过变量$My_Table传递的表。你以错误的方式传递变量。请查看thread
{b}中$My_Table是可变的。当您运行脚本时,第一步是运行SQLplus,并且此变量不存在。

在你的情况下它应该是这样的:

./myscript.sh $My_Table $FILE

在您的脚本中使用&1代替$My_Table&2代替$FILE

如果您构建查询,那么您不需要SET COLSEP "|"作为查询的结果就是单列,因此请使用COLSEP||来连接所有cols