SQL Developerで、スクリプトを書くときに良く使う構文

SQLワークシートでサポートされているSQL*Plus文

まずは、なにが使えるのか把握。
SQLワークシートには、SQL*Plusコマンドが、一部ですがサポートされています。
2.1から結構増えたようです。

リリース1.2 リリース1.5 リリース2.1 リリース3.1
@ @ @ @
@@ @@ @@ @@
/ /
acc[ept] acc[ept] acc[ept] acc[ept]
autotrace autotrace
cl[ear] cl[ear] clear screen clear screen
conn[ect] conn[ect] conn[ect] conn[ect]
def[ine] def[ine] def[ine] def[ine]
desc[ribe] desc[ribe] desc[ribe] desc[ribe]
doc[ument] doc[ument] doc[ument] doc[ument]
echo echo
errors errors
esc[ape] esc[ape]
exec[ute] exec[ute] exec[ute] exec[ute]
exit exit exit exit
feed[back] feed[back]
help
ho[st] ho[st] ho[st] ho[st]
pagesize pagesize
pau[se] pau[se] pau[se] pau[se]
print print
pro[mpt] pro[mpt] pro[mpt] pro[mpt]
quit quit quit quit
rem[ark] rem[ark] rem[ark] rem[ark]
roll[back] roll[back]
set pau[se] {ON|OFF} set pau[se] {ON│OFF} set pau[se] {ON|OFF} set pau[se] {ON|OFF}
sta[rt] sta[rt] sta[rt] sta[rt]
spo[ol] spo[ol]
term[out] term[out]
timi[ng] timi[ng] timi[ng] timi[ng]
undef[ine] undef[ine] undef[ine] undef[ine]
user user
var[iable] var[iable]
ver[ify] ver[ify]
whenever whenever whenever whenever
xquery xquery xquery xquery

使用例

つぎの構文を、スクリプトの最初で、良く使っています。

CLEAR SCREEN;
WHENEVER SQLERROR EXIT ROLLBACK;
SET SERVEROUTPUT ON SIZE 2000;
CLEAR SCREEN
スクリプト出力の内容をクリアしてくれます。[F5]でスクリプト実行時、いちいち、「クリア」ボタンをクリックしなくても、最新の結果のみが表示されるようになります。
WHENEVER SQLERROR EXIT ROLLBACK
こけた時にロールバック。ちなみに、メニューの「ツール」-「プリファレンス」-「ワークシート」-「SQLワークシートで自動コミット」のチェックは、はずしておいた方が、無難かと。
SET SERVEROUTPUT
DBMS_OUTPUT.PUT_LINE を使用する場合は、ONにしないと出力してくれません。


プロシージャやファンクションを実行する場合、実行したいファンクションなどを右クリックし「実行」を選択すると、「PL/SQLブロック」が表示されるので、その内容を全てコピーして、SQLワークシートに貼り付けると、次のような感じになります。

CLEAR SCREEN;
WHENEVER SQLERROR EXIT ROLLBACK;
SET SERVEROUTPUT ON SIZE 2000;

DECLARE
  INPRM1 NUMBER;
  INPRM2 CHAR(3);
  OUTPRM1 VARCHAR2(2000);
  v_Return NUMBER;
BEGIN
  INPRM1 := 12345;
  INPRM2 := 'AAA';

  v_Return := FNC_HOGE(
    INPRM1 => INPRM1,
    INPRM2 => INPRM2,
    OUTPRM1 => OUTPRM1
  );
  
  DBMS_OUTPUT.PUT_LINE('OUTPRM1 = ' || OUTPRM1);
  DBMS_OUTPUT.PUT_LINE('v_Return = ' || v_Return);
END;