2015-07-03 4 views
1

есть ли способ получить количество вставленных строк внутри одной и той же транзакции? Я вижу, что команда PL/SQL:Получите количество вставленных строк простым sql

SQL%ROWCOUNT 

делает работу, но я не хочу, чтобы создать процедуру, только для этого! Я пытался просто позвонить

insert into T ... 
select SQL%ROWCOUNT; 

, но это дает мне «недопустимый символ». Если я хорошо помню, что у mysql действительно был способ получить эту информацию, действительно ли оракул не предоставляет никаких средств для этого?

ответ

1

Я не хочу, чтобы создать процедуру, только для этого

Нет необходимости создавать какие-либо процедуру, вы могли бы просто использовать анонимным Блок PL/SQL.

Например,

SQL> SET serveroutput ON 
SQL> DECLARE 
    2 var_cnt NUMBER; 
    3 BEGIN 
    4 var_cnt :=0; 
    5 FOR i IN(SELECT empno FROM emp) 
    6 LOOP 
    7 INSERT INTO emp(empno) VALUES(i.empno); 
    8 var_cnt := var_cnt + SQL%ROWCOUNT; 
    9 END loop; 
10 DBMS_OUTPUT.PUT_LINE(TO_CHAR(var_cnt)||' rows inserted'); 
11 END; 
12/
14 rows inserted 

PL/SQL procedure successfully completed. 

SQL> 

Update Если вы не можете использовать PL/SQL, и просто SQL, то вы не можете использовать SQL%ROWCOUNT.

Единственный вариант, который приходит на ум, чтобы иметь столбец метки времени в таблице, и запросить количества на основе метки времени, чтобы узнать количество строк, вставленных.

+0

thumbs up, но моя проблема в том, что я буду называть эти sql-операторы внутри ORM, и поэтому я не могу ничего сделать:/ – Phate

+0

@Phate Хорошо, см. Мое обновление. –

+0

Не лучший, но я думаю, что это единственный способ :( – Phate

0

Попробуйте следующее,

DBMS_OUTPUT.put_line(TO_CHAR(SQL%ROWCOUNT)||' rows inserted'); 
+0

Сообщается, что неизвестная команда – Phate

+0

У вас есть сервер oracle или sql? –

+2

Я думаю, что @Phate означает, что 'DBMS_OUTPUT.PUT_LINE' не является командой SQL, и она не может работать, если она не находится в блоке PL/SQL. – MT0

Смежные вопросы