programing

Postgre와 동등한 오라클SQL INSERT...돌아오는 *;

powerit 2023. 10. 30. 21:20
반응형

Postgre와 동등한 오라클SQL INSERT...돌아오는 *;

Oracle에서 Postgre로 많은 DML(INSERT/UPDATE/DEETE) 쿼리를 변환했습니다.SQL과 이제 동일한 행 집합을 생성하는지 확인해야 합니다. 즉, Oracle 및 postgresql 데이터베이스에 처음에 동일한 데이터가 포함되어 있다고 가정하고 동일한 행을 삭제하고 동일한 행을 업데이트하는 경우 등입니다.포스트그레에SQL 측면, DML 문과 함께 리턴 조항을 사용할 수 있습니다.

INSERT INTO test(id, name) VALUES(42, 'foo') RETURNING *;

위 문장의 좋은 점은 구조나 실행되는 테이블의 이름조차 모른 채 모든 DML 문장에 'returning *'라는 행을 붙이고 선택 문장처럼 모든 행을 얻을 수 있다는 것입니다.

하지만 오라클 쪽에서는 그다지 반짝이지 않는 것 같습니다.설명서에 따르면 오라클 8i(제가 작업하고 있는 제품)는 RETURNING 절을 지원하지만, 결과를 변수로 저장해야 하고, 수동으로 열 이름을 지정하는 대신 모든 결과 열을 얻을 수 있는 명확한 방법이 없는 것 같습니다.

따라서 문제는 Postgre를 에뮬레이션할 오라클 문(또는 문 시퀀스)이 있는지 여부입니다.하드코딩 테이블 또는 열 이름이 없는 SQL 'returning *'.즉, 다음과 같은 Oracle 함수를 작성할 수 있는 방법이 있습니까?

fn('INSERT INTO test(id, name) VALUES(42, ''foo'')') 

SQL 문에 의해 삽입(또는 일반적인 경우 수정)된 행 집합을 반환해야 합니다.

업데이트: 실제로 매우 유사한 질문을 찾았습니다(Postgre가 아닌 SQL 서버에서 변환하기 위한 질문).SQL, Oracle)로 이동합니다.그래도 가능하다면 좀 더 간단한 대답을 듣고 싶습니다.

, , , , 를 포함하는 해결책을 상상할 수 있었지만, 분명 단순하지 않을 것입니다.저는 이전에 임의 유형의 레코드를 사용해야 하는 문제에 대해 XML과 관련된 이와 같은 해결책을 발견했습니다.그들은 아주 별난 놈들입니다.두 개의 개별 쿼리를 실행해야 할 것 같습니다.특히 Oracle 8i의 경우 대부분의 기능을 활용하지 못할 것으로 예상됩니다.

간단히 말해서, Postgres만큼 강력한 SQL Construct는 없다고 생각합니다.... RETURNINGOracle의 절입니다.

특히 8i와 같은 이전 버전의 오라클에서는 현재는 불가능합니다.비슷한 질문에 대한 이 답변을 참조하십시오.

언급URL : https://stackoverflow.com/questions/8820789/oracle-equivalent-of-postgresql-insert-returning

반응형