ORACLE db的Ubuntu Shell脚本

时间:2014-10-06 19:35:10

标签: oracle ubuntu sh

我刚接触在Ubuntu OS上通过SSH(putty)终端使用ORACLE,我的工作站有Windows操作系统。

我正在编写一个连接到oracle DB的shell,然后将表导出到一个文本文件中,然后根据列的值删除一些记录。

没有安装SQL Plus,这是必须的,因为我们需要模拟客户端的基础架构。

这是脚本代码的一部分:

#!/bin/bash
su oracle
export ORACLE_SID=ORA_SID
export ORACLE_HOME=/uxx/app/oracle/product/11.2.0/client_1
export TWO_TASK=[hostname]:[port]/[ORA_SID]
isql -v [db] [user] [pass] <<EOF
CREATE OR REPLACE DIRECTORY test AS '/xxx/yyy/';
DECLARE
f utl_file.file_type;
BEGIN
f := utl_file.fopen('TEST','sample.txt','W');
for s in (select * from [table]);
loop
utl_file.put_line(f,s);
end loop;
utl_file.fclose(f);
END;
quit;
exit
EOF

当我运行脚本时,我得到以下输出:

SQL> SQLRowCount returns -1
SQL> [S1000][Oracle][ODBC][Ora]ORA-06550: line 1, column 7:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:

begin function pragma procedure subtype type <an identifier>
<a double-quoted delimited-identifier> current cursor delete
exists prior

[ISQL]ERROR: Could not SQLExecute
SQL> [37000][Oracle][ODBC][Ora]ORA-00900: invalid SQL statement

[ISQL]ERROR: Could not SQLExecute
SQL> [S1000][Oracle][ODBC][Ora]ORA-06550: line 1, column 5:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:

( begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge

[ISQL]ERROR: Could not SQLExecute
SQL> [37000][Oracle][ODBC][Ora]ORA-00900: invalid SQL statement

[ISQL]ERROR: Could not SQLExecute
SQL> [37000][Oracle][ODBC][Ora]ORA-00900: invalid SQL statement

[ISQL]ERROR: Could not SQLExecute
SQL> [37000][Oracle][ODBC][Ora]ORA-00900: invalid SQL statement

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

结果SqlPlus确实安装在系统上,但是自从我上次在UNIX上工作以来已经好几年了,我不知道如何使应用程序正常工作。

我首先将bin路径导出到我的looged会话:

export PATH=$ORACLE_HOME/bin:$PATH

然后我可以运行sql plus并使用假脱机工具。

sqlplus usr/pass

现在有了SqlPlus,我可以使用常规的spool命令。

感谢所有帮助过的人。