2008-12-11 30 views

Trả lời

28

chèn ... trả lại.

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

"seq" ở đây đề cập đến tên cột có giá trị bạn muốn lưu vào biến s2.

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

Edit: như Mark Harrison chỉ ra, điều này giả định rằng bạn có thể kiểm soát như thế nào id của bản ghi chèn của bạn được tạo ra. Nếu bạn có quyền kiểm soát và chịu trách nhiệm về nó, điều này nên công việc ...


Sử dụng một thủ tục lưu trữ để thực hiện chèn của bạn và trả lại id.

ví dụ: cho một bảng tên với 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; 

Sử dụng thủ tục lưu trữ cho các hoạt động CRUD là một ý tưởng tốt không phân biệt nếu bạn không sử dụng một lớp ORM, vì nó làm cho mã của bạn database- hơn bất khả tri, giúp chống lại các cuộc tấn công tiêm và như vậy.

6

Câu trả lời của tôi trong C#, xem xét bảng "testtable" có một "ID" collumn như PK với một chuỗi tự động và trường "testname" là một trường 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); 


    } 
} 
} 
Các vấn đề liên quan