我想知道是否有可能以某种方式获取sqlplus
输出以发现我的数据库是否已启动。
我想在数据库上运行脚本列表,但在此之前,我想知道数据库是否已启动并运行我的脚本。
以下是我的尝试:
sqlplus /@DB1 << EOF
> select 1 from dual;
> EOF
它无法连接,但sqlplus的返回码仍然说“一切正常”!
SQL*Plus: Release 11.2.0.4.0 Production on Mon Nov 28 10:06:41 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-12505: TNS:listener does not currently know of SID given in connect descriptor Enter user-name: SP2-0306: Invalid option. Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]] where ::= [/][@] ::= [][/][@] Enter user-name: ju@srv:/tmp/jcho $ echo $? 0
我知道我可以查看测试查询的结果,如:
sqlplus /@DB1 << EOF
select 'ALL_GOOD_BOY' from dual;
EOF
会给1
行,否则为0
:
$ a.sh |grep ALL_GOOD_BOY|wc -l
......这对我来说似乎有很多步骤。在“无法连接”的模式下设置sqlplus的任何其他方式都会给出“错误”返回码?
答案 0 :(得分:6)
感谢@Kacper提供的参考,我可以将 sqlplus /nolog
改编为我的案例;这就是这个想法:
sqlplus
SQLERROR
上设置特定的返回代码 - 这是connect
失败时发生的情况sqlplus /nolog << EOF
WHENEVER SQLERROR EXIT 50
WHENEVER OSERROR EXIT 66
connect /@${MISTERY_DB}
exit;
EOF
然后是电话:
/ju $ export MISTERY_DB="eg_NON_EXISTING_DB"
/ju $ a.sh
SQL*Plus: Release 11.2.0.4.0 Production on Tue Nov 29 08:43:44 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> SQL> SQL> ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
/ju $ echo $?
50
还相关:Connect to sqlplus in a shell script and run SQL scripts
答案 1 :(得分:1)
以下是您可以使用的另一种解决方案:@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.qr, container, false);
locdata = new ArrayList<>();
new LocDownloader(new DataListener(){
@Override
public void onData(ArrayList<HashMap<String, String>> data){
locData.addAll(data); // <-- Data gets added here
Toast.makeText(getActivity(),"hallo"+locdata,Toast.LENGTH_LONG).show();
}
}).execute();
return rootView;
}
适用于我(在Oracle 11g上):
WHENEVER SQLERROR sql.sqlcode