ExecuteScalar를 사용하여 삽입된 행에서 생성된 ID를 가져오는 방법은 무엇입니까?
Oracle에서는 삽입된 행에서 생성된 ID(또는 다른 열)를 출력 매개 변수로 가져올 수 있습니다.예:
insert into foo values('foo','bar') returning id into :myOutputParameter
ExecuteNonQuery 대신 ExecuteScalar를 사용하여 동일한 방법이 있습니까?
출력 매개 변수나 저장 프로시저를 사용하지 않습니다.
ps: 저는 sql server가 아닌 Oracle을 사용하고 있습니다!!!
오라클에 있는 경우 ExecuteNonQuery 및 ResultParameter를 사용해야 합니다.쿼리로 쓸 방법이 없습니다.
using (OracleCommand cmd = con.CreateCommand()) {
cmd.CommandText = "insert into foo values('foo','bar') returning id into :myOutputParameter";
cmd.Parameters.Add(new OracleParameter("myOutputParameter", OracleDbType.Decimal), ParameterDirection.ReturnValue);
cmd.ExecuteNonQuery(); // an INSERT is always a Non Query
return Convert.ToDecimal(cmd.Parameters["myOutputParameter"].Value);
}
Oracle은 ID 열에 대해 시퀀스를 사용합니다.
테이블 기본 키에 대한 시퀀스를 설정한 경우 시퀀스를 삽입할 트리거도 작성해야 합니다.기본 키 필드에 다음 값을 입력합니다.
이미 이 개념에 익숙하다고 가정하고 시퀀스에 질문하면 답변을 얻을 수 있습니다.Oracle에서는 INT를 반환하는 함수를 만든 다음 함수 내에서 INSERT를 수행합니다.트리거를 올바르게 설정했다고 가정하면 시퀀스 값을 쿼리하여 반환할 수 있습니다.
예를 들어 보겠습니다.
CREATE TABLE my_table (
id_my_table INT PRIMARY KEY
description VARCHAR2(100) NOT NULL
)
CREATE SEQUENCE my_table_seq
MINVALUE 1
MAXVALUE 1000
START WITH 1
INCREMENT BY 2
CACHE 5;
자동 증분을 직접 관리하려면 다음과 같은 방법이 있습니다.
INSERT INTO my_table (
id_my_table,
description
) VALUES (my_table_seq.NEXTVAL, "Some description");
COMMIT;
반면에, 기본 키 증가에 대해 관심을 갖지 않으려면 트리거를 진행할 수 있습니다.
CREATE OR REPLACE TRIGGER my_table_insert_trg
BEFORE INSERT ON my_table FOR EACH ROW
BEGIN
SELECT my_table_seq.NEXTVAL INTO :NEW.id_my_table FROM DUAL;
END;
그런 다음 삽입할 때 다음과 같이 INSERT 문을 입력합니다.
INSERT INTO my_table (description) VALUES ("Some other description");
COMMIT;
INSERT 후에, 여러분은 아마
SELECT my_table_seq.CURRVAL
또는 시퀀스의 실제 값을 선택할 수 있습니다.
다음은 도움말 링크입니다.
http://www.orafaq.com/wiki/Sequence
http://www.orafaq.com/wiki/AutoNumber_and_Identity_columns
이것이 도움이 되길 바랍니다!
아래 코드를 사용할 수 있습니다.
using (OracleCommand cmd = conn.CreateCommand())
{
cmd.CommandText = @"INSERT INTO my_table(name, address)
VALUES ('Girish','Gurgaon India')
RETURNING my_id INTO :my_id_param";
OracleParameter outputParameter = new OracleParameter("my_id_param", OracleDbType.Decimal);
outputParameter.Direction = ParameterDirection.Output;
cmd.Parameters.Add(outputParameter);
cmd.ExecuteNonQuery();
return Convert.ToDecimal(outputParameter.Value);
}
테이블에 "guid"라는 이름의 열 하나를 추가할 수 있는 한 가지 방법: c#에서 하나의 레코드를 삽입할 때 guid를 생성하여 guid 열에 기록합니다.그런 다음 생성된 GUID로 선택을 수행하면 삽입된 레코드의 ID를 얻을 수 있습니다 :)
Select t.userid_pk From Crm_User_Info T
Where T.Rowid = (select max(t.rowid) from crm_user_info t)
필요한 ID를 반환합니다.
언급URL : https://stackoverflow.com/questions/1336911/how-to-get-the-generated-id-from-an-inserted-row-using-executescalar
'source' 카테고리의 다른 글
구성 요소 Vue 3에서 속성 렌더링 방법 (0) | 2023.07.20 |
---|---|
Where 절 내의 if 문 (0) | 2023.07.20 |
오라클 11g 클라이언트를 10g 서버와 함께 사용해도 괜찮습니까? (0) | 2023.07.20 |
열을 삭제하면 Oracle에서 어떻게 됩니까? (0) | 2023.07.20 |
Oracle 모든 테이블의 모든 열에서 문자열 검색 (0) | 2023.07.20 |