Oracle PL/SQL RECORD(Table-Based Records)

使用Table-Based Records進行資料處理

前言

RECORD是一種具結構的資料型態變數,可用來保存不同結構的資料,RECORD 依照參照類型的不同可區分以下三種。

  • 基於資料表的RECORD(Table-Based Records)
  • 基於游標的RECORD(Cursor-Based Records)
  • 使用者記錄的RECORD(User-Defined Records)

基於Table的RECORD必須在「DECLARE」先行宣告,使用「資料表%ROWTYPE」屬性參照資料表(或 VIEW)的整列結構。

實作

使用語法如下

1
2
3
4
5
6
7
8
DECLARE
    RECORD 變數1 資料表%ROWTYPE;
    RECORD 變數2 VIEW%ROWTYPE;
BEGIN
    SELECT * INTO RECORD 變數1 FROM 資料表;
    SELECT * INTO RECORD 變數2 FROM VIEW;
    .....
END;

以下進行相關示範

1
2
3
4
5
6
7
8
SET FEEDBACK OFF;
SET SERVEROUTPUT ON;
DECLARE
    R_ARTICLE ARTICLE%ROWTYPE;
BEGIN
   SELECT * INTO R_ARTICLE FROM ARTICLE WHERE TITLE = '楊藝的洋溢生活 - 我的第一篇 PL/SQL 筆記';
   DBMS_OUTPUT.PUT_LINE('ID: ' || R_ARTICLE.ID || ', TITLE: ' || R_ARTICLE.TITLE || ', 建立日期: ' || R_ARTICLE.CREATE_DATE || ', 修改日期:' || R_ARTICLE.MODIFY_DATE);
END;

執行結果

1
ID: 7C5E3A5AD847F0D3E050A8C0FD894690, TITLE: 楊藝的洋溢生活 - 我的第一篇 PL/SQL 筆記, 建立日期: 2018-12-07 10:59:37, 修改日期:2018-12-08 12:39:53

*基於資料表的RECORD僅可用於單純的表格結構,其原因在於於宣告時需使用「RECORD 變數1 資料表%ROWTYPE;」方法建立 RECORD,因此無法參照需要進行資料表 JOIN 或是使用彙總函數的情況,因此如有上述情形,可先建立 VIEW 彙總所需要的資料,再以 VIEW%ROWTYPE 建立 RECORD,以此方法進行應變。