programing

Oracle: 방금 삽입한 행의 시퀀스 번호를 가져오려면 어떻게 해야 합니까?

linuxpc 2023. 6. 15. 21:38
반응형

Oracle: 방금 삽입한 행의 시퀀스 번호를 가져오려면 어떻게 해야 합니까?

방금 삽입한 행의 시퀀스 번호를 어떻게 얻을 수 있습니까?

삽입...돌아오는.

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

여기서 "seq"는 변수 s2에 값을 저장할 열의 이름을 나타냅니다.

파이썬:

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())

편집: Mark Harrison이 지적했듯이, 삽입된 레코드의 ID가 생성되는 방법을 사용자가 제어할 수 있다고 가정합니다.만약 당신이 그것에 대한 모든 통제와 책임을 가지고 있다면, 이것은 효과가 있을 것입니다...


저장 프로시저를 사용하여 삽입을 수행하고 ID를 반환합니다.

예: ID가 있는 이름 테이블의 경우:

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;

ORM 계층을 사용하지 않는 경우에도 CRUD 작업에 저장 프로시저를 사용하는 것이 좋습니다. ORM 계층을 사용하면 코드가 데이터베이스에 구애받지 않고 주입 공격 등을 방지할 수 있습니다.

테이블 "testtable"에 PK로 "ID" 열이 있고 "testname" 필드가 varchar 필드라는 점을 고려하여 C#으로 답변합니다.

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);


    }
}
}

언급URL : https://stackoverflow.com/questions/361304/oracle-how-do-i-get-the-sequence-number-of-the-row-just-inserted

반응형