Получите идентификатор вставки в том же операторе [дубликат]

Если вы хотите видеть собственные ZLP-коды, вы должны использовать шрифты Zebra, если вы не используете их, вы увидите коды .GRF, как показано ниже

^ FT320,64 ^ XG007.GRF, 1, 1 ^ FS

и не понимаю их. После этого нажмите «Печать», затем выберите «Печать в файл». Таким образом, вы можете видеть четкие коды ZLP.

9
задан 16 June 2009 в 21:48
поделиться

7 ответов

с использованием getGeneratedKeys ():

resultSet = pstmt.getGeneratedKeys(); 

if (resultSet != null && resultSet.next()) { 
    lastId = resultSet.getInt(1); 
}
10
ответ дан 4 December 2019 в 10:34
поделиться

Вы можете использовать предложение RETURNING , чтобы получить значение любого столбца, который вы обновили или вставили. Он работает с триггером (т.е. вы получаете значения, фактически вставленные после выполнения триггеров). Обратите внимание:

SQL> CREATE TABLE a (ID NUMBER PRIMARY KEY);

Table created
SQL> CREATE SEQUENCE a_seq;

Sequence created
SQL> VARIABLE x NUMBER;
SQL> BEGIN
  2     INSERT INTO a VALUES (a_seq.nextval) RETURNING ID INTO :x;
  3  END;
  4  /

PL/SQL procedure successfully completed
x
---------
1

SQL> /

PL/SQL procedure successfully completed
x
---------
2
6
ответ дан 4 December 2019 в 10:34
поделиться

Я не мог комментировать, иначе я бы добавил к сообщению Винко Врсаловича :

The id generated by a sequence can be obtained via 

insert into table values (sequence.NextVal, otherval)
select sequence.CurrVal

ran in the same transaction as to get a consistent view.

Обновление последовательности после получения от нее следующего значения является автономной транзакцией. В противном случае другой сеанс получит такое же значение из последовательности. Таким образом, получение currval не получит вставленный идентификатор, если другой сеанс выбрал из последовательности между вставкой и выбором.

С уважением, Роб

1
ответ дан 4 December 2019 в 10:34
поделиться

EMS , Database Workbench и IBExpert имеют облегченную версию

Мне больше всего нравится IBExpert

На самом деле вопрос в том, можете ли вы запросить последнее сгенерированное значение идентификатора в текущем сеансе , даже если другие сеансы также вставляют строки и генерируют свои собственные значения идентификаторов. Вы можете быть уверены, что каждая РСУБД, предлагающая функцию автоматического увеличения, предлагает способ запроса этого значения , и он сообщает вам последний идентификатор, сгенерированный в вашей текущей области сеанса. На это не влияют вставки, сделанные в других сеансах.

0
ответ дан 4 December 2019 в 10:34
поделиться

Идентификатор, сгенерированный последовательностью, можно получить с помощью

insert into table values (sequence.NextVal, otherval)
select sequence.CurrVal

, запущенного в той же транзакции, чтобы получить согласованное представление.

0
ответ дан 4 December 2019 в 10:34
поделиться

I think you'll find this helpful:

I have a table with a auto-incrementing id. From time to time I want to insert rows to this table, but want to be able to know what the pk of the newly inserted row is.

String query = "BEGIN INSERT INTO movement (doc_number) VALUES ('abc') RETURNING id INTO ?; END;";
OracleCallableStatement cs = (OracleCallableStatement) conn.prepareCall(query);
cs.registerOutParameter(1, OracleTypes.NUMBER );
cs.execute();
System.out.println(cs.getInt(1));

Source: Thread: Oracle / JDBC Error when Returning values from an Insert

0
ответ дан 4 December 2019 в 10:34
поделиться

Я не мог комментировать, иначе я бы просто добавил в сообщение dfa, но ниже приведен пример этой функциональности с прямым JDBC.

http://www.ibm.com/developerworks/java/library/j-jdbcnew/

Однако, если вы используете что-то вроде Spring, они скроют для вас множество кровавых деталей. Если это может быть полезно, просто хороша Spring Chapter 11, в которой подробно рассказывается о JDBC. Его использование избавило меня от многих головных болей.

0
ответ дан 4 December 2019 в 10:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: