Oracle: Как получить порядковый номер только что вставленной строки?

Как получить порядковый номер только что вставленной строки?

insert … возврат.

declare s2 number; begin insert into seqtest2(x) values ('aaa') returning seq into s2; dbms_output.put_line(s2); end; 

«seq» здесь относится к имени столбца, значение которого вы хотите сохранить в переменной s2.

в python:

 myseq=curs.var(cx_Oracle.NUMBER) curs.prepare("insert into seqtest2(x) values('bbb') returning seq into :x") curs.execute(None, x=myseq) print int(myseq.getvalue()) 

Изменить: как отметил Марк Харрисон, это предполагает, что вы контролируете, как создается идентификатор вашей вставленной записи. Если у вас есть полный контроль и ответственность за это, это должно сработать …


Используйте хранимую процедуру для выполнения вставки и возврата идентификатора.

например: для таблицы имен с идентификаторами:

 PROCEDURE insert_name(new_name IN names.name%TYPE, new_name_id OUT names.id%TYPE) IS new_id names.id%TYPE; BEGIN SELECT names_sequence.nextVal INTO new_id FROM dual; INSERT INTO names(id, name) VALUES(new_id, new_name); new_name_id := new_id; END; 

Использование хранимых процедур для CRUD-операций – хорошая идея, независимо от того, используете ли вы уровень ORM, поскольку он делает ваш код более агрегированным по базе данных, помогает против инъекций и т. Д.

Мой ответ на C #, учитывая, что таблица «testtable» имеет столбец «ID» как PK с последовательностью автосинхронов, а поле «testname» является полем varchar.

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Oracle.DataAccess.Client; using System.Data; namespace ConsoleApplication3 { class Program { public static void Main(string[] args) { OracleConnection cn = new OracleConnection("your connection string here"); string sql = "INSERT INTO testtable(testname) VALUES('testing2') RETURNING id INTO :LASTID"; OracleParameter lastId = new OracleParameter(":LASTID", OracleDbType.Int32); lastId.Direction = ParameterDirection.Output; using (OracleCommand cmd = new OracleCommand(sql, cn)) { cn.Open(); cmd.Parameters.Add(lastId); cmd.ExecuteNonQuery(); Console.WriteLine("Last ID: " + lastId.Value.ToString()); cn.Close(); } Console.WriteLine(); Console.ReadKey(false); } } }