ただのメモとリンク集です。
- SQL*Plusで結果の前後に出力される空行を削除する方法
- SPOOLで不要な空行を出力させない
- sqlplus WHENEVER SQLERROR を検証
- 表作成、変更など
- 【シェルスクリプト】IFSで区切り文字(デリミタ)を変更する方法
- Bashでコマンドライン実行結果を空白区切りで配列に入れる
- PL/SQL EXCEPTION (例外)
- PL/SQL EXCEPTION (例外)本家
WHENEVER SQLERROR EXIT SQL.SQLCODE 時のsqlplusの戻り値は、sqlcode mod 255 で設定せれることですね。
WHENEVER SQLERROR EXIT SQL.SQLCODE
select mod(6550,256) from dual;
そして、考えた良さそうなコード(無名ブロック)
SET SERVEROUTPUT ON
SET LINES 100
SET PAGES 0
SET HEADING OFF
SET TRIMSPOOL OFF
SET FEEDBACK OFF
SET ECHO OFF
SET RECSEP OFF
WHENEVER SQLERROR EXIT SQL.SQLCODE
WHENEVER OSERROR EXIT failure
variable retcode number
variable upd_count number
declare
dd date;
cnt number;
begin
:retcode := 0;
select sysdate into dd from dual;
select to_number(EMP_ID) into cnt from EMP where 1=1 and rownum=1;
:upd_count := 0;
FOR i IN 1..30 LOOP
:upd_count := :upd_count + 1;
end loop;
/*dbms_output.put_line(cnt);*/
if cnt = 9 then
/*dbms_output.put_line(cnt);*/
cnt := cnt / 0;
end if;
exception
when others then
:retcode := 255;
end;
/
SET TERMOUT ON
print :upd_count
exit :retcode
一応動くし、shell から結果を取れる。
以上。