programing

Oracle 테이블의 마지막 행을 가져오는 방법

powerit 2023. 3. 29. 21:57
반응형

Oracle 테이블의 마지막 행을 가져오는 방법

Oracle 11g Express 데이터베이스의 테이블에 삽입한 마지막 행을 가져옵니다.이거 어떻게 해?

Oracle 테이블에는 순서 개념이 없기 때문에 테이블의 "마지막" 행은 없습니다.

단, 마지막으로 삽입된 프라이머리 를 찾고 이 프라이머리 키가 증가수라고 가정하면 다음과 같이 할 수 있습니다.

select *
  from ( select a.*, max(pk) over () as max_pk
           from my_table a
                )
 where pk = max_pk

각 행이 생성된 날짜가 있는 경우 컬럼의 이름이 지정되면 다음과 같이 됩니다.created:

select *
  from ( select a.*, max(created) over () as max_created
           from my_table a
                )
 where created = max_created

또는 다음과 같은 집약 쿼리를 사용할 수 있습니다.

select *
  from my_table
 where pk = ( select max(pk) from my_table )

SQL Fielle을 소개합니다.

SELECT * FROM (
    SELECT * FROM table_name ORDER BY sortable_column DESC
) WHERE ROWNUM = 1;
select * from table_name ORDER BY primary_id DESC FETCH FIRST 1 ROWS ONLY;

하위 쿼리를 수행하지 않는 가장 간단한 방법입니다.

복합 키 K(k1, ..., kn)에 대한 엄격한 총 순서에 따른 마지막 행:

SELECT  *
FROM    TableX AS o
WHERE   NOT EXISTS (
            SELECT  *
            FROM    TableX AS i
            WHERE   i.k1 > o.k1
                OR  (i.k1 = o.k1 AND i.k2 > o.k2)
                ...
                OR  (i.k1 = o.k1 AND i.k2 = o.k2 AND i.k3 = o.k3 AND ... AND i.kn > o.kn)
        )
;

K가 단순(즉, 복합적이지 않음)한 특수한 경우를 고려할 때, 위의 내용은 다음과 같이 요약된다.

SELECT  *
FROM    TableX AS o
WHERE   NOT EXISTS (
            SELECT  *
            FROM    TableX AS i
            WHERE   i.k1 > o.k1
        )
;

이 쿼리가 1개의 행만 반환하려면 키는 넥타이 없이 순서를 지정해야 합니다.동점이 허용되면 이 쿼리는 가장 큰 키로 연결된 모든 행을 반환합니다.

다음과 같이 할 수 있습니다.

SELECT * FROM (SELECT your_table.your_field, versions_starttime
               FROM your_table
               VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE)
WHERE ROWNUM = 1;

또는 다음 중 하나를 선택합니다.

SELECT your_field,ora_rowscn,scn_to_timestamp(ora_rowscn) from your_table WHERE ROWNUM = 1;
SELECT * FROM 
  MY_TABLE
WHERE 
  <your filters>
ORDER BY PRIMARY_KEY DESC FETCH FIRST ROW ONLY
$sql = "INSERT INTO table_name( field1, field2 )  VALUES ('foo','bar') 
        RETURNING ID INTO :mylastid";
$stmt = oci_parse($db, $sql);
oci_bind_by_name($stmt, "mylastid", $last_id, 8, SQLT_INT);
oci_execute($stmt);

echo "last inserted id is:".$last_id;

힌트: 아래 {your_id_col_name}의 ID 열 이름을 사용해야 합니다.

"RETURNING {your_id_col_name} INTO :mylastid"

언급URL : https://stackoverflow.com/questions/12378424/how-to-get-the-last-row-of-an-oracle-table

반응형