Oracle: Come faccio ad ottenere il numero di sequenza della riga appena inserita?

Come posso ottenere il numero di sequenza della riga appena inserita?

InformationsquelleAutor Mark Harrison | 2008-12-11



3 Replies
  1. 29

    inserire … tornando.

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

    “seq” qui si riferisce al nome della colonna, il cui valore si desidera memorizzare nella variabile s2.

    in 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. 9

    Edit: come Mark Harrison ha sottolineato, questo presuppone che si ha il controllo su come l’id del record inserito è creato. Se si ha il pieno controllo e la responsabilità, questo dovrebbe lavoro…


    Utilizzare una stored procedure per eseguire la insert e restituire l’id.

    ad esempio: per una tabella di nomi con 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;

    L’utilizzo di stored procedure per le operazioni CRUD è una buona idea, indipendentemente se si sta utilizzando un livello ORM, in quanto rende il codice più database indipendente, aiuta a combattere gli attacchi di iniezione e così via.

  3. 6

    La mia risposta in C#, considerando che la tabella “tabellaprova” ha un “ID” collumn come PK con un autoinc sequenza e di settore “nometest” è un campo 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);
    
    
        }
    }
    }

Lascia un commento