2008-11-06 13 views
6

Praca z bazą danych Oracle 9i z aplikacji ASP.NET 2.0 (VB) za pomocą OLEDB. Czy istnieje sposób, aby instrukcja insert zwróciła wartość? Mam sekwencję ustawioną do wpisów liczbowych, gdy przechodzą one do bazy danych, ale potrzebuję tej wartości, aby powrócić po wstawieniu, więc mogę wykonać pewną manipulację do zestawu, który właśnie wprowadziłem w VB z tyłu kodu.Zwróć wartość z instrukcji wstawiania

Odpowiedz

8

Niektóre możliwości:

1) używa klauzuli powracający:

INSERT INTO emp (empno, ename) VALUES (emp_seq.NEXTVAL, 'ANDREWS') 
RETURNING empno INTO :variable; 

2) zastosowanie sekwencji CURRVAL:

INSERT INTO emp (empno, ename) VALUES (emp_seq.NEXTVAL, 'ANDREWS'); 
SELECT emp_seq.CURRVAL INTO :variable FROM DUAL; 

CURRVAL zwraca ostatnią wartość sekwencji wygenerowanej przez twoja sesja.

+0

Witaj Tony, czy to dotyczy również serwera SQL. Potrzebuję tego samego dla SQL Server 2008 R2. –

+0

@Ujaj, przepraszam, nie wiem, SQL Server, ale zobacz http://bytes.com/topic/sql-server/answers/83675-return-primary-key-insert-statement –

+0

Dzięki za pomoc. Ale nie szukam procedury przechowywanej. –

0

Jeśli ta wartość jest kluczem tworzonym przez bazę danych, wpadłeś na dobry przykład, dlaczego powinieneś używać identyfikatorów UUID jako klucza tabeli i generujesz je w kodzie.

Ta metoda zapewnia szybszą wydajność w konfiguracji.

2

Oracle wydaje się mieć keywod zwany "return", który może zwrócić daną kolumnę wstawionego wiersza, jednak może to wymagać ręcznego ustawienia pola "autoinkrementacji" poprzez wywołanie kolejnej wartości w sekwencji.

Sprawdź to dyskusja o tym:

http://forums.oracle.com/forums/thread.jspa?threadID=354998

Jednak zawsze można wybrać bieżący sekwencji numer w drugim zapytaniu, coś jak MySQLs last_insert_id()

0

najpierw użyć SELECT oświadczenie, aby uzyskać następną sekwencję. W tym celu możesz użyć the Oracle dual table.

SELECT my_seq.nextval FROM dual 

Użyj sekwencję że pobrane w kolejnych INSERT wypowiedzi.

INSERT ... 
INSERT ... 
Powiązane problemy