2017-06-21 45 views
0

我在bash一个简单的脚本,仅仅通过庆典返回一个给定的表如何通过bash的访问Oracle表时,这是一个新创建的表

的计数特罗命令其像

user>bash Bash_Script.bsh -T MyTableTthatAlreadyExists 

之后的连接参数它只是这样做:

SQLSTRING="SELECT COUNT(*) FROM $SYBTAB;" 

    BATCH_ARGS=`sqlplus -S /nolog <<SQL | tail -1 
     connect $ORCL_USR/[email protected]$ORCL_TNS; 
     alter session set nls_date_format='YYYYMMDD'; 
     set pagesize 0 long 4096 linesize 32767 feed off head off; 
     $SQLSTRING 
     quit; 
SQL` 

echo "$BATCH_ARGS" 

它的工作。 YEST它的工作原理,它返回我的表的行数。 问题来了,当我创建一个新表MyNewTable - 该表在Oracle中 存在,所以当我在SQL Developer中做

select count(*) from MyNewTable; 

返回正确的nummer。

但是当我再次抛出unix命令。它不工作,它不返回任何东西

user>bash Bash_Script.bsh -T MyNewTable --> return nothing 

我不知道自己我失踪,我没有考虑我。 我为Grant授予特权,但他们都没有。

任何人都可以帮我吗? 由于提前,恩里克

+0

你什么也得不到 - 不是错误?你确定你的脚本正在达到那个代码吗?你确定你是通过你的脚本和SQL Developer作为同一个用户连接到数据库的吗?并确实对同一个数据库? (如果不是,你应该会看到一个错误...) –

+0

@AlexPoole没有错误。就像表格是空的一样。在bash脚本中,我只是改变了表的名称,旧表返回的数量与新的返回没有任何关系。不知道为什么, - 两个表都在同一个模式和数据库中,他们两个都可以访问抛出SQL Developer,但我只是到了旧的抛出unix。 - 不是一个提交问题左右。 – Enrique

+0

你应该看到零表报告为空表,而不是没有。 –

回答

1

你的脚本只正从SQL输出的最后一行* Plus的

BATCH_ARGS=`sqlplus -S /nolog <<SQL | tail -1 

如果删除tail部分:

BATCH_ARGS=`sqlplus -S /nolog <<SQL 

然后你会看到实际发生了什么。与存在,与修改我看到一个表:

user>bash Bash_Script.bsh -T MyTableTthatAlreadyExists 

Session altered. 

     1815 

,并用表不存在我看到:

user>bash Bash_Script.bsh -T MyNewTable 

Session altered. 

     SELECT COUNT(*) FROM t43 
          * 
ERROR at line 1: 
ORA-00942: table or view does not exist 

看来你看到ORA-01031: insufficient privileges,所以用户要连接因为需要具有为新表授予的选择特权。


由于只想实际计数,如果换成了alterset的订单条款也将抑制Session altered.消息反馈届时将被关闭:

BATCH_ARGS=`sqlplus -S /nolog <<SQL 
     connect $ORCL_USR/[email protected]$ORCL_TNS; 
     set pagesize 0 long 4096 linesize 32767 feed off head off; 
     alter session set nls_date_format='YYYYMMDD'; 
     $SQLSTRING 
     quit; 
SQL` 

和你会看到,现有的表只是:

user>bash Bash_Script.bsh -T MyTableTthatAlreadyExists 
     1815 

使tail无论如何。

相关问题