복붙노트

[SQL] 테이블 오라클의 마지막 행을 얻는 방법

SQL

테이블 오라클의 마지막 행을 얻는 방법

나는 오라클 11g Express 데이터베이스의 테이블에 삽입 된 마지막 행을 얻을 싶어요. 이걸 어떻게 할 수 있습니까?

해결법

  1. ==============================

    1.Oracle 테이블 순서의 개념이 없기 때문에 테이블에서 "마지막"행 같은 건 없다.

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

    그러나 마지막에 삽입 기본 키를 찾을 싶다고 가정이 기본 키가 증분 번호입니다, 당신이 뭔가를 할 수 있습니다 :

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

    각 행이 열을 만들어 이름을 지정하면이, 될 것 만들어진 날짜가있는 경우 :

    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 바이올린입니다.

  2. ==============================

    2.

    SELECT * FROM (
        SELECT * FROM table_name ORDER BY sortable_column DESC
    ) WHERE ROWNUM = 1;
    
  3. ==============================

    3.

    select * from table_name ORDER BY primary_id DESC FETCH FIRST 1 ROWS ONLY;
    

    즉 하위 쿼리를 수행하지 않고 단순한 하나

  4. ==============================

    4.복합 키 K 위에 총 엄격한 순서에 따라 마지막 행 (K1, ..., KN)

    복합 키 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
            )
    ;
    

    이 쿼리가 반환하는 하나는 관계없이 키해야 순서를 행합니다. 관계가 허용하는 경우,이 쿼리는 최대의 키에 묶여 모든 행을 반환합니다.

  5. ==============================

    5.당신은 이런 식으로 작업을 수행 할 수 있습니다 :

    당신은 이런 식으로 작업을 수행 할 수 있습니다 :

    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;
    
  6. ==============================

    6.

    $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"
    
  7. from https://stackoverflow.com/questions/12378424/how-to-get-the-last-row-of-an-oracle-a-table by cc-by-sa and MIT license