3

以下のスクリプトを .sql ファイルで実行しています。Windows コマンド ライン コンソールを使用して sqlplus を呼び出しています。スクリプトが終了すると、INSERT ステートメントによって追加されたレコードの数が表示されないことを除いて、すべてが正常に見えます。以下にも出力が表示されます。

脚本

WHENEVER SQLERROR EXIT 1 ROLLBACK
WHENEVER OSERROR EXIT 1 ROLLBACK
SET FEEDBACK  ON 
SET VERIFY ON
BEGIN
DBMS_OUTPUT.put_line('Output Nothing');
END;
/
INSERT INTO .........

COMMIT;
QUIT;
/

出力表示

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Apr 9 22:08:47 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

PL/SQL procedure successfully completed.

Commit complete.

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64
bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

TOAD/SQLNavigator などのツールで同じ SQL を実行すると、追加された行数を確認できました (下の ** マークの行を参照)。

TOAD に表示される出力

Processing ...
SET FEEDBACK  ON 

SQL*Plus command ignored.
Processing ...
SET VERIFY ON


SQL*Plus command ignored.
Processing ...
BEGIN
DBMS_OUTPUT.put_line('Doing Nothing');
END;

Doing Nothing
Processing ...
INSERT INTO .......

**11 row(s) inserted**

Processing ...
COMMIT

Processing ...
QUIT;

SQL*Plus command ignored.

このスクリプトを simple で実行した場合でも、この SQL の影響を受ける行数を取得するのに役立つと思われる設定を教えてください'sqlplus'

4

5 に答える 5

3

SET FEEDBACK ON のデフォルトのしきい値は 6 です。より少ない数のフィードバックが必要な場合は、「SET FEEDBACK 1」を使用します。

于 2012-04-10T04:12:15.667 に答える
3

SQL*Plus は行数を出力しませんが、次のようにして明示的に行うことができます。

INSERT blah blah blah;
DBMS_OUTPUT.put_line (SQL%ROWCOUNT);
于 2012-04-10T02:25:07.597 に答える
1

使用する

set echo on
set autotrace on 

実行されたコマンドとステートメントに関する統計を表示します。この場合、挿入された行数

WHENEVER SQLERROR EXIT 1 ROLLBACK
WHENEVER OSERROR EXIT 1 ROLLBACK
SET FEEDBACK  ON 
SET VERIFY ON
set echo on
set autotrace on
BEGIN
DBMS_OUTPUT.put_line('Output Nothing');
END;
/
INSERT INTO .........

COMMIT;

QUIT;
/
于 2012-05-01T10:39:59.903 に答える
0

11gクライアントでうまくいくようです:

C:\>sqlplus user/pw

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 9 21:12:12 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> insert into testing (select 1,'XX' from dual connect by level < 11);

10 rows created.

SQL>

10g クライアントの動作が異なるとは思いませんでしたが、今はテストできません。

編集:

10g SQLPlus でも同様に機能します。今日、正確なスクリプトを実行しました:

C:\>sqlplus user/pw@db

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Apr 10 09:12:26 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

DB> WHENEVER SQLERROR EXIT 1 ROLLBACK
DB> WHENEVER OSERROR EXIT 1 ROLLBACK
DB> SET FEEDBACK  ON
DB> SET VERIFY ON
DB> BEGIN
  2      DBMS_OUTPUT.put_line('Output Nothing');
  3  END;
  4  /
Output Nothing

PL/SQL procedure successfully completed.

DB> insert into xx (select 'AA' from dual connect by level < 10);

9 rows created.

DB> COMMIT;

Commit complete.

DB> QUIT;
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

C:\>

1 行挿入するか 9 行挿入するかは問題ではありません。メッセージが表示されます。スクリプトの例から除外しているものがあると思います。INSERT は BEGIN/END ブロック内にありますか? それはメッセージを抑制します。

于 2012-04-10T03:17:10.763 に答える
0
rem to see Pl/SQL "print" statements:
set serveroutput on 
于 2012-04-10T15:22:33.977 に答える