当前位置:  开发笔记 > 编程语言 > 正文

Oracle:如何获取刚刚插入的行的序列号?

如何解决《Oracle:如何获取刚刚插入的行的序列号?》经验,为你挑选了3个好方法。

如何获取刚刚插入的行的序列号?



1> Mark Harriso..:

插入...返回.

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



2> Dan Vinton..:

编辑:正如马克哈里森指出的那样,这假设您可以控制如何创建插入记录的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操作都是一个好主意,因为它使您的代码更加与数据库无关,有助于防止注入攻击等.



3> 小智..:

我在C#中的答案,考虑到表"testtable"有一个"ID"列作为带有autoinc序列的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);


    }
}
}

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有