資料庫開發人員的概念

Oracle Database 開發人員會建立和維護資料庫應用程式。本節簡要概述資料庫開發人員的工作,以及可用的開發工具。

資料庫開發人員的職責

Oracle 開發人員負責建立或維護使用 Oracle 技術堆疊的應用程式資料庫元件。

Oracle 開發人員可開發新的應用程式,或將現有的應用程式轉換成在 Oracle Database 環境中執行。因此,開發人員會與資料庫管理員密切合作,共用知識和資訊。

Oracle 資料庫開發人員可預期參與下列工作:

另請參閱:

資料庫開發人員的工具

Oracle 提供數種工具來開發資料庫應用程式。本節描述一些常用的開發工具。

SQL Developer

SQL Developer 是一種方便的方式,可讓資料庫開發人員使用 SQL*Plus 來編輯和開發基本工作。SQL Developer 是 SQL*Plus 的圖形化版本,以 Java 撰寫,可支援在 SQL 和 PL/SQL 中進行開發。您可以使用標準資料庫認證連線到任何 Oracle 資料庫綱要。SQL Developer 可讓您:

您可以透過預設的 Oracle Database 安裝和免費下載來使用 SQL Developer。

另請參閱: Oracle AI Database Get Started with Oracle AI Database Development 和 Oracle SQL Developer User's Guide,瞭解如何使用 SQL Developer

Oracle APEX AI 應用程式產生器

Oracle APEX AI Application Generator 是 Oracle Database 的 Web 應用程式開發工具。Oracle APEX AI Application Generator 使用內建功能,例如使用者介面主題、導覽控制項、表單處理程式和彈性報表,以加速應用程式開發。

Oracle APEX 會與資料庫一起安裝,並包含表格和 PL/SQL 程式碼中的資料。當您執行應用程式時,瀏覽器會傳送已轉譯為 Oracle APEX PL/SQL 呼叫的 URL 要求。在資料庫處理 PL/SQL 之後,結果會以 HTML 的形式轉送回瀏覽器。每次您要求或提交頁面時都會發生此週期。

您可以將 Oracle APEX 與內嵌的 PL/SQL 閘道搭配使用。閘道會在資料庫中的 Oracle XML DB HTTP 伺服器中執行,並提供建立動態應用程式的必要基礎架構。如圖 23-1 所示,內嵌的 PL/SQL 閘道會透過消除中間層來簡化應用程式架構。

圖 1:含有內嵌 PL/SQL 閘道的 APEX

cncpt317.gif 圖解描述

Oracle JDeveloper

Oracle JDeveloper 是一個整合式開發環境 (IDE),使用最新的 Java、XML、Web 服務以及 SQL 產業標準來建置服務導向的應用程式。Oracle JDeveloper 支援完整的軟體開發週期,並具備模型設計、編碼、除錯、測試、分析、調整及部署應用程式的整合功能。

Oracle JDeveloper 使用各種應用程式開發工具的視窗。例如,建立 Java 應用程式時,您可以使用 Java Visual Editor 和「元件選盤」等工具。除了這些工具之外,Oracle JDeveloper 還提供一系列的導覽器,協助您組織和檢視專案的內容。

另請參閱:

Oracle Developer Tools for Visual Studio .NET

Oracle Developer Tools for Visual Studio .NET 是一組與 Visual Studio .NET 環境整合的應用程式工具。Oracle Developer Tools for Visual Studio .NET 工具提供對 Oracle 功能的 GUI 存取權,讓使用者能夠執行各種應用程式開發工作,以及提升開發生產力和易用性。

Oracle Developer 工具支援使用 Visual Basic、C# 和其他 .NET 語言來編寫和實作 .NET 預存程序。這些程序是以 .NET 語言撰寫,且包含 SQL 或 PL/SQL 陳述式。

資料庫開發人員主題

本節涵蓋對資料庫開發人員而言最重要,且尚未在手冊其他地方討論的主題。

應用程式設計與調整原則

Oracle 開發人員必須設計、建立及調整資料庫應用程式,才能達成安全性和效能目標。

下列應用程式設計與調整原則是有用的準則:

另請參閱:

正確查詢原則

真實世界的應用程式查詢可能會非常複雜,具有許多結合,而且在所有角落案例中,這些查詢通常都不正確,明確指定傳回錯誤結果,即使是在生產系統中長期執行的 SQL 會產生未注意到的錯誤。本節說明如何有系統地分析,以避免這些全常用的 SQL 錯誤最為重要。

查詢看起來可能很複雜。它們可以參照數十個表格,包括建立在其他視觀表上的視觀表,以及使用 WITH 子句中的子查詢、SELECT 清單以及 WHERE 子句。在複雜度下,良好的查詢仍然會回答一個明確的問題。該問題通常會反映一組特定業務實體的資料需求。查詢傳回的每一列應代表該實體的一個實例。對於 GROUP BY 查詢,每個資料列都應該代表相同實體之執行處理的聚總。

在大多數系統中,每個業務實體類型都很重要,足以查詢具有代表該實體的對應表格。在此意義上,無論查詢的外觀有多複雜,許多寫得很好的查詢最終都會質疑單一表格的資料列。周圍複雜性通常存在,因為標準化資料庫會跨相關表格 (如父項表格、祖項表格等) 儲存實體的屬性。

例如,標準化設計通常會在 CUSTOMERS 表格中儲存客戶的名稱一次。ORDERS 表格只會儲存 CUSTOMER_ID,因此可以與 CUSTOMERS 結合。ORDER_ITEMS 表格會儲存 ORDER_ID,讓它可以結合至 ORDERS,而且不會重複 CUSTOMER_ID。如果想要列出 ORDER_ITEMS 的子集以及每個項目的客戶名稱,我們需要一系列唯一的結合,首先是 ORDERS (父項),然後是 CUSTOMERS (祖項)。在標準化的 OLTP 系統中,查詢可能需要許多這類結合來擷取單一實體類型的詳細資訊,即使結果集仍會從一個「主要」表格將一對一對應至資料列子集。

我們將資料列加寬表格 (RWT) 稱為主要表格。在正確的查詢中,其他結合通常會透過從上階資料表、祖項資料表等新增唯一相符的查尋資料來「寬鬆」每個 RWT 資料列。這些結合不應乘以 RWT 列數。針對從邏輯上從 RWT 開始的所有結合,具有此結構的查詢為僅加寬查詢列 (RWOQ)。備註:篩選可以捨棄 RWT 列。內部結合和 WHERE 述詞可以從 RWT 中移除列。「列加寬」不表示查詢會保留所有 RWT 列。也就是說,在篩選之後,以及在任何聚總之前,每個查詢結果資料列都會嚴格對應到其餘的 RWT 資料列一對一。

如果查詢中的其他每個資料表都可透過單一資料表 (代表查詢傳回或聚總的實體) 的唯一結合鏈來連線,則該開始資料表為 RWT,且查詢為 RWOQ。若無法透過唯一關鍵碼保證任何表格,以將一對一對應至預先彙總結果列,則查詢不是 RWOQ。實際上,大多數非 RWOQ 會產生無法由應用程式正確解譯的結果,因為查詢不會明確地將結果列對應至定義完善且業務重大的實體。例如,此類資料列的加總值會為相同實體多次新增相同的值,讓總計保持不變。

從 Oracle Database Release 26ai 開始,JOIN TO ONE 功能大大助於撰寫正確的 RWOQ。當您對所有結合使用 JOIN TO ONE 時,資料庫會在剖析時檢查查詢為 RWOQ,將 FROM 子句中最左側的表格視為 RWT,假設物件為基本表格,而非可能隱藏非 RWOQ 行為的檢視。如果資料庫無法在剖析時證明 JOIN TO ONE 結合的唯一性,它會執行程式實際執行檢查來驗證在執行時所遇到之資料的每個來自預設 RWT 的結合是唯一的。如果在實際結果中偵測到非唯一結合,則會產生執行時期錯誤。大部分的 RWOQ 可轉換成 JOIN TO ONE 表單。無法轉換成 JOIN TO ONE 表單的查詢一般會在轉換時顯示不規則的結合。當轉換的查詢在沒有執行時期錯誤的情況下執行時,會強烈確認查詢具有想要的一列個實體特性。

如需有關 RWOQ 的更多詳細資料,瞭解它們為何有助於避免 SQL 中出現細微的正確性問題,以及 JOIN TO ONE 如何強制執行這些問題,請參閱 Oracle AI Database Development Guide。

用戶端資料庫程式設計

您可以使用預先編譯器或 Java 轉譯器將 SQL 敘述句置於原始程式碼中,或使用 API 讓應用程式與資料庫互動。

有兩種基本技術可以讓程序資料庫應用程式使用 SQL:使用 PL/SQL 與 Java 進行伺服器端程式設計,以及使用預先編譯器和 API (例如 Java Database Connectivity (JDBC) 或 Oracle Call Interface (OCI)) 進行用戶端程式設計。

另請參閱:

Oracle AI Database Development Guide,瞭解如何選擇程式設計環境

伺服器端程式設計:PL/SQL 和 Java 以進行複查

內嵌 SQL

過去,用戶端 / 伺服器程式已使用內嵌 SQL 與資料庫互動。

Oracle 預先編譯器

用戶端 / 伺服器程式通常使用 Oracle precompiler 撰寫,這是可讓您在高階程式中嵌入 SQL 陳述式的程式設計工具。

例如,Oracle Pro*C/C++ 預先編譯器可讓您在 C 或 C++ 來源檔案中嵌入 SQL 陳述式。Oracle 預先編譯器也可用於 COBOL 與 FORTRAN。

預先編譯器提供數種優點,包括:

包含 SQL 陳述式的用戶端應用程式為主機程式。這個程式是以外派國語言撰寫。在主機程式中,您可以混合完整的 SQL 陳述式與完整的 C 陳述式,並在 SQL 陳述式中使用 C 變數或結構。嵌入 SQL 陳述式時,您必須以關鍵字 EXEC SQL 開頭,並以分號結尾。Pro*C/C++ 會將 EXEC SQL 陳述式轉換為執行階段程式庫 SQLLIB 的呼叫。

許多內嵌的 SQL 敘述句只有透過新增子句或使用程式變數,才會與其互動式對等項目不同。下列範例比較互動式與內嵌的 ROLLBACK 陳述式:

ROLLBACK;           -- interactive
EXEC SQL ROLLBACK;  -- embedded

敘述句的效果相同,但您在互動式 SQL 環境中 (例如 SQL Developer) 會使用第一個敘述句,在 Pro*C/C++ 程式中使用第二個敘述句。

預先編譯器接受主機程式作為輸入,將內嵌的 SQL 陳述式轉譯為標準資料庫執行時期程式庫呼叫,並產生來源程式,您可以用一般的方式編譯、連結及執行。圖 23-2 說明開發使用預先編譯器之程式的典型步驟。

圖 2:具有預先編譯器的程式開發

cncpt253.gif 圖解描述

另請參閱:Pro*C/C++ Developer's Guide,以取得 Pro*C/C++ Precompiler 的完整描述

從屬端 API

現在大多數開發人員都使用 API 將 SQL 嵌入其資料庫應用程式中。

例如,啟用程式與 Oracle Database 通訊的兩個常用 API 是 Open Database Connectivity (ODBC) 和 JDBC。Oracle Call Interface (OCI) 和 Oracle C++ Call Interface (OCCI) 是從屬端程式設計的其他兩個共同 API。

OCI 和 OCCI

除了預先編譯器之外,Oracle 還提供 OCI 和 OCCI API。

OCI 可讓您使用主機程式設計語言 (例如 C) 來操控資料庫中的資料和綱要。OCCI 是適合搭配 C++ 使用的物件導向介面。這兩個 API 都可讓開發人員使用原生子程式呼叫來存取 Oracle Database 和控制 SQL 執行。

在某些情況下,OCI 提供比更高層級介面更好的效能或更多功能。OCI 和 OCCI 提供許多功能,包括:

OCI 和 OCCI 以動態程式實際執行程式庫 (OCILIB) 的形式提供標準資料庫存取和擷取函數的程式庫。您可以在程式實際執行時,將此程式庫連結至應用程式。因此,您可以用與非資料庫應用程式相同的方式編譯和連結 OCI 或 OCCI 程式,以避免個別的預先處理或預先編譯步驟。圖 23-3 說明開發流程。

圖 3:使用 OCI 或 OCCI 進行開發流程

cncpt307.gif 圖解描述

另請參閱:

ODBC 與 JDBC

ODBC 是標準 API,可讓應用程式連線至資料庫,然後準備和執行 SQL 敘述句。

ODBC 與程式設計語言、資料庫和作業系統無關。ODBC 的目標是讓任何應用程式都能存取任何資料庫中包含的資料。

資料庫驅動程式是指位於應用程式和資料庫之間的軟體。此驅動程式會將應用程式進行的 API 呼叫轉譯成資料庫可以處理的命令。透過使用 ODBC 驅動程式,應用程式可以存取任何資料來源,包括儲存在試算表中的資料。ODBC 驅動程式會執行 ODBC 標準與資料庫之間的所有對映。

Oracle 提供的 Oracle ODBC 驅動程式可讓符合 ODBC 的應用程式存取 Oracle Database。例如,以 Visual Basic 撰寫的應用程式可以使用 ODBC 來查詢和更新 Oracle 資料庫中的表格。

JDBC 是一個低層次的 Java 介面,可讓 Java 應用程式與 Oracle 資料庫互動。就像 ODBC 一樣,JDBC 是與供應商無關的 API。JDBC 標準是由 Sun Microsystems 定義,並透過 java.sql 介面實作。

JDBC 標準可讓個別提供者使用自己的 JDBC 驅動程式實行和擴充標準。Oracle 針對從屬端程式設計提供下列 JDBC 驅動程式:

下列程式碼片段來自使用 JDBC OCI 驅動程式建立 Statement 物件並查詢 dual 表格的 Java 程式:

// Create a statement
Statement stmt = conn.createStatement();

// Query dual table
ResultSet rset = stmt.executeQuery("SELECT 'Hello World' FROM DUAL");

另請參閱:Oracle AI Database Development Guide 和 Oracle AI Database Get Started with Java Development 以深入瞭解 JDBC

全球化支援

Oracle Database 全球化支援可讓您以原生語言儲存、處理及擷取資料。

全球化支援使您能夠開發多語言應用程式和軟體,從全球任何地方同時存取和執行。

編寫全域化資料庫應用程式的開發人員必須執行下列動作:

例如,應用程式可能需要轉譯使用者介面的內容,並以原生使用者的語言與地區設定偏好設定來處理資料。例如,應用程式必須處理多位元組漢字資料、以適當的區域格式顯示訊息與日期,以及處理 7 位元 ASCII 資料,而不需要使用者變更設定。

全球化支援環境

全球化支援環境包括用戶端應用程式和資料庫。您可以透過在用戶端和伺服器上設定參數和環境變數來控制語言相依的作業,這些變數可能存在於不同的位置。注意:在舊版中,Oracle 稱為「國家語言支援 (National Language Support,NLS)」功能。NLS 實際上是全球化支援的子集,提供選擇國家語言,並以特定字元集儲存資料的能力。

Oracle Database 為下列功能提供全球化支援:

字元集

全域化支援的主要元件是字元集,此為一種編碼配置,用來在電腦螢幕上顯示字元。

下列區別在應用程式開發中很重要:

字元群組 (例如字母字元、意識形態、符號、標點符號及控制字元) 可以編碼為字元集。編碼的字元集會為集合中的每個字元指派一個稱為代碼點或編碼值的唯一數字代碼。程式碼點對全域環境很重要,因為可能需要在不同的字元集之間轉換資料。

電腦產業使用許多編碼的字元集。這些集合與可用字元數、可用字元數、指定給每個字元的代碼點等等不同。Oracle Database 支援大多數國家、國際和廠商特定的編碼字元集標準。

Oracle Database 支援下列編碼字元集類別:

另請參閱:Oracle AI Database Globalization Support Guide,瞭解字元集移轉的相關資訊

特定語言環境設定

語言環境是系統或程式執行所在的語言與文化環境。NLS 參數決定從屬端和資料庫上的語言環境特定行為。

代表從屬端執行敘述句時,資料庫階段作業會使用 NLS 設定值。例如,資料庫會讓正確的區域使用從屬端的千分位分隔符號。通常,用戶端主機上的 NLS_LANG 環境變數會同時指定伺服器階段作業與用戶端應用程式的語言環境。程序如下:

  1. 當從屬端應用程式啟動時,會從環境設定值起始從屬端 NLS 環境。

    所有在本機執行的 NLS 作業 (例如在 Oracle Developer 應用程式中顯示格式) 都使用這些設定值。

  2. 從屬端會在連線時,將 NLS_LANG 所定義的資訊傳送至資料庫。

  3. 資料庫階段作業會根據從屬端通訊的設定值起始其 NLS 環境。

    如果從屬端未指定設定值,則階段作業會使用初始化參數檔中的設定值。只有在從屬端未指定任何 NLS 設定值時,資料庫才會使用初始化參數設定值。如果從屬端指定了一些 NLS 設定值,則其餘的 NLS 設定值會是預設值。

每個代表從屬端應用程式啟動的階段作業,都可以在與其他階段作業相同或不同的地區設定中執行。例如,一個階段作業可以使用德文地區設定,而另一個階段作業則使用法文地區設定。此外,每個階段作業可能已指定相同或不同的語言需求。

下表顯示兩個使用不同 NLS_LANG 設定值的從屬端。使用者在每個主機上啟動 SQL*Plus、登入與 hr 相同的資料庫,並同時執行相同的查詢。每個階段作業的結果會因浮點數的語言環境特定 NLS 設定而有所不同。

表格 1 語言環境特定 NLS 設定值

t 從屬端主機 1 從屬端主機 2
t0
$ NLS_LANG=American_America.US7ASCII
$ export NLS_LANG 
$ NLS_LANG=German_Germany.US7ASCII
$ export NLS_LANG
t1
$ sqlplus /nolog 
SQL> CONNECT hr@proddb 
Enter password: ******* 
SQL> SELECT 999/10 FROM DUAL;
  
999/10  
----------  
99.9
$ sqlplus /nolog  
SQL> CONNECT hr@proddb  
Enter password: *******  
SQL> SELECT 999/10 FROM DUAL; 
  
999/10  
----------  
99,9

另請參閱:Oracle AI Database Globalization Support Guide,瞭解 NLS 設定值

Oracle Globalization Development Kit

Oracle Globalization Development Kit (GDK) 包含完整的程式設計 API。

API 可供 Java 和 PL/SQL 使用,並包含程式碼範例以及文件,以解決建立全域應用程式時所遇到的許多設計、開發和部署問題。GDK 可簡化開發流程,並降低開發用來支援全球環境之網際網路應用程式的成本。

GDK 主要由兩個部分組成:GDK for Java 和 GDK for PL/SQL。Java 的 GDK 為 Java 應用程式提供全球化支援。PL/SQL 的 GDK 為 PL/SQL 程式設計環境提供全球化支援。這兩個部分提供的功能並不相同。

另請參閱: Oracle AI Database 全球化支援指南

非結構化資料

非結構化資料是未細分為較小邏輯結構的資料。

傳統的關聯式模型處理簡單的結構化資料,適用於簡單的表格。Oracle Database 也支援非結構化資料,無法將其分解為標準元件。非結構化資料包括文字、圖形影像、影片片段和聲音波形。

Oracle Database 包含可處理非結構化內容的資料類型。這些資料類型在資料庫中會顯示為原生類型,並使用 SQL 查詢。

Oracle Database 中的 XML 概要

Oracle XML DB 是一組與高效能 XML 處理、儲存及擷取相關的 Oracle Database 技術。Oracle XML DB 透過可互通的方式涵蓋 SQL 和 XML 資料模型,提供原生 XML 支援。

Oracle XML DB 適用於任何 Java 或 PL/SQL 應用程式,其中應用程式所處理的部分或全部資料會以 XML 表示。例如,應用程式可能有大量必須擷取、產生、驗證及搜尋的 XML 文件。

Oracle XML DB 提供許多功能,包括:

下列範例會建立類型為 XMLType 的表格 orders:

CREATE TABLE orders OF XMLType;
CREATE DIRECTORY xmldir AS path_to_folder_containing_XML_file;
INSERT INTO orders
  VALUES (XMLType(BFILENAME('XMLDIR','purOrder.xml'),NLS_CHARSET_ID('AL32UTF8')));

上述範例也會建立一個 SQL 目錄物件,這是資料庫中主機電腦上實體目錄的邏輯名稱。此目錄包含 XML 檔案。此範例會將 purOrder.xml 檔案中的 XML 內容插入 orders 表格中。

Oracle XML Developer's Kit (XDK) 包含讀取、操控、轉換和檢視 XML 文件的基本建構區塊,無論是在檔案系統上還是在資料庫中。Java、C 和 C++ 都有提供 API 和工具。Oracle XDK 生產環境隨附商業重新配銷授權。

範例 23-1 XMLType

CREATE TABLE orders OF XMLType;
CREATE DIRECTORY xmldir AS path_to_folder_containing_XML_file;
INSERT INTO orders
  VALUES (XMLType(BFILENAME('XMLDIR','purOrder.xml'),NLS_CHARSET_ID('AL32UTF8')));

另請參閱:

Oracle Database 中的 JSON 概要

Oracle Database 為 JavaScript Object Notation (JSON) 資料提供原生支援,包括查詢和編製索引。

本節包含下列主題:

什麼是 JSON?

JavaScript Object Notation (JSON) 是與語言無關的文字式資料格式,可以代表物件、陣列和純量資料。各種程式設計語言可以剖析和產生 JSON 資料。

JSON 通常是資料交換語言。它通常用來序列化結構化資料,並透過網路交換,通常介於伺服器與 Web 應用程式之間。JSON 是 Web 瀏覽器中執行以 HTML 內嵌 JavaScript 撰寫之應用程式的主要資料格式。

JavaScript 物件是零組或多組特性名稱和相關 JSON 值的關聯陣列。JSON 物件是 JavaScript 物件文字,會以大括號括住的特性清單撰寫,名稱 - 值組以逗號分隔,而且每組的名稱和值都以冒號分隔。物件特性有時稱為索引鍵。物件特性名稱 - 值組有時稱為物件成員。

範例 23-2 JSON 物件

此範例顯示代表採購單的 JSON 物件,其最上層特性名稱為 PONumber、Reference、Requestor、User、Costcenter、ShippingInstruction、Special Instructions、AllowPartialShipment 和 LineItems。

{ "PONumber"             : 1600,
  "Reference"            : "ABULL-20140421",
  "Requestor"            : "Alexis Bull",
  "User"                 : "ABULL",
  "CostCenter"           : "A50",
  "ShippingInstructions" : { "name"   : "Alexis Bull",
                             "Address": { "street"  : "200 Sporting Green",
                                          "city"    : "South San Francisco",
                                          "state"   : "CA",
                                          "zipCode" : 99236,
                                          "country" : "United States of America" },
                             "Phone" : [ { "type" : "Office", "number" : "909-555-7307" },
                                         { "type" : "Mobile", "number" : "415-555-1234" } ] },
  "Special Instructions" : null,
  "AllowPartialShipment" : false,
  "LineItems"            : [ { "ItemNumber" : 1,
                               "Part"       : { "Description" : "One Magic Christmas",
                                                "UnitPrice"   : 19.95,
                                                "UPCCode"     : 13131092899 },
                               "Quantity"   : 9.0 },
                             { "ItemNumber" : 2,
                               "Part"       : { "Description" : "Lethal Weapon",
                                                "UnitPrice"   : 19.95,
                                                "UPCCode"     : 85391628927 },
                               "Quantity"   : 5.0 } ] }

在前面的範例中,大部分的特性都有字串值。PONumber、zipCode、ItemNumber 及 Quantity 具有數值。Shipping Instructions 和 Address 具有物件作為值。LineItems 具有陣列作為值。

備註:Oracle XML DB Developer's Guide,以取得更完整的 JSON 總覽

JSON 和 XML

JSON 和 XML 都是一般用來作為資料交換語言。與關聯式資料不同,JSON 資料和 XML 資料都可以在資料庫中儲存、編製索引和查詢,而沒有任何定義資料的綱要。

由於它的簡單定義和功能,JSON 資料通常比 XML 資料更容易產生、剖析和處理。人類的學習和使用也比較容易。下表說明 JSON 與 XML 之間的進一步差異。

表格 2 JSON 與 XML 之間的差異

功能 JSON XML
適用於簡單結構化資料 是 是,但也支援半結構化資料和複雜的結構化資料
適用於混合內容 否 是
缺少屬性、命名空間、繼承以及替代 是 否
訂購的重要性 否 是
主要用於文件而非資料 否 是
包含日期資料類型 否 是

備註:Oracle AI Database JSON Developer's Guide 以取得更全面的 XML 和 JSON 比較

JSON 的原生資料庫支援

JSON 廣泛儲存在缺乏關聯式資料庫功能的 noSQL 資料庫中。相較之下,Oracle Database 透過交易、編製索引、宣告式查詢及視觀表等功能,以原生方式支援 JSON。

存取儲存在資料庫中的 JSON 資料的方式與存取其他資料庫資料的方式相同,包括使用 OCI、.NET 和 JDBC。儲存 JSON 資料的偏好方式是使用 JSON 資料類型,這是針對查詢和 DML 處理最佳化的專屬二進位格式。您可以在大多數允許 SQL 資料類型的位置使用 JSON 資料類型,包括 PL/SQL 程式單位的資料欄類型或參數類型。

透過使用 Oracle SQL,您可以對 JSON 資料執行下列作業:

文字 JSON 資料一律使用 Unicode 字元集,可以是 UTF8 或 UTF16。Oracle Database 在剖析和查詢 JSON 資料時,會在內部使用 UTF8。如果輸入或輸出此類處理的資料必須使用與 UTF8 不同的字元集,則會自動執行適當的字元集轉換。備註:Oracle AI Database JSON Developer's Guide,以取得 Oracle Database 中 JSON 支援的更全面概要

LOB 概要

大型物件 (LOB) 資料類型可讓您以二進位或字元格式來儲存及操控大型的非結構化資料區塊。

大型物件 (LOB) 資料類型提供有效率且隨機的資料存取方式。

內部業務範圍

內部 LOB 會將資料儲存在資料庫本身,而非外部檔案中。

內部貸款包括以下各項:

資料庫儲存的 LOB 與其他資料類型不同。建立 LOB 資料欄時,會以隱含方式建立 LOB 區段與 LOB 索引。包含 LOB 區段與 LOB 索引的表格空間 (一律會一起儲存) 可能與包含表格的表格空間不同。

注意:資料庫有時可以將少量的 LOB 資料儲存在表格本身,而不是儲存在個別的 LOB 區段中。

LOB 區段會將資料儲存在稱為區塊的片段中。區塊是一組邏輯連續的資料區塊,是 LOB 最小的配置單位。表格中的資料列會儲存一個稱為 LOB 定位器的指標,指向 LOB 索引。查詢表格時,資料庫會使用 LOB 索引來快速找到 LOB 區塊。

資料庫管理 LOB 區段與其他資料的讀取一致性。資料庫會將之前的影像儲存在區段本身,而不是使用還原資料來記錄變更。當異動變更 LOB 時,資料庫會配置新的分區,並將舊資料保留在原位。如果交易倒回,資料庫會將變更倒回至索引,此索引會指向舊的區塊。

另請參閱:

外部 LOB

BFILE (二進位檔案大型物件或 LOB) 是外部大型物件。

BFILE 是外部 LOB,因為資料庫會儲存指向作業系統中的檔案。外部資料為唯讀。

BFILE 會使用目錄物件來尋找資料。使用的空間大小取決於目錄物件名稱的長度與檔案名稱的長度。

BFILE 不使用與內部 LOBS 相同的讀取一致性機制,因為二進位檔案是資料庫的外部檔案。如果檔案中的資料變更,則來自相同二進位檔案的重複讀取可能會產生不同的結果。

SecureFiles

SecureFiles LOB 儲存體是兩種儲存體類型之一,另一種是 BasicFiles LOB 儲存體。

SECUREFILE LOB 參數可啟用進階功能,包括壓縮和去除重複項 (「進階壓縮選項」的一部分) 以及加密 (「進階安全選項」的一部分)。從 Oracle Database 12c 開始,SecureFiles 是 LOB 的預設儲存體機制。

另請參閱:

Oracle Text 概要

Oracle Text (文字) 是與 Oracle Database 整合的全文檢索技術。Oracle Text 會編製儲存在檔案系統、資料庫或 Web 上之任何文件或文字內容的索引。您可以根據文件的文字內容、描述資料或屬性來搜尋這些文件。

Oracle Text 提供下列優點:

針對使用案例,假設您必須為銷售電子設備的拍賣地點建立型錄索引。每天新增庫存。項目說明、投標日期和價格必須一起儲存。應用程式需要良好的混合查詢回應時間。首先,您可以建立並填入 catalog 表格。然後,您可以使用 Oracle Text 來建立 CTXCAT 索引,以 SELECT ... WHERE CATSEARCH 敘述句中的 CATSEARCH 運算子進行查詢。圖 23-4 說明目錄表格的關係、目錄表格的 CTXCAT 索引,以及使用 CATSEARCH 運算子來查詢索引的目錄應用程式。

圖 4:目錄查詢應用程式

ccapp017.gif 圖解描述

另請參閱:

Oracle Spatial and Graph 概要

Oracle Spatial and Graph (Spatial and Graph) 包含空間資料與分析以及實體、邏輯、網路以及社交和語意圖表應用程式的進階功能。

空間功能提供一個綱要與功能,可協助儲存、擷取、更新及查詢 Oracle 資料庫中的空間功能集合。空間資料的範例為藍圖。空間資料表示地圖中物件的地球位置 (例如經度和緯度)。彩現地圖時,此空間資料可在二維紙張上投影物件的位置。地理資訊系統 (GIS) 可以儲存、擷取及呈現此地球相對空間資料。當 Oracle 資料庫儲存此空間資料時,您可以使用「空間與圖形」來操控及擷取此資料,並將此資料與其他資料建立關聯。

另請參閱: Oracle Spatial 開發人員指南

SQL 特性圖表總覽

Oracle Database 的 Property Graph 功能為 Oracle Database 提供強大的圖表支援。

「特性圖表」功能可讓您針對產品建議、詐騙偵測、風險分析、目標行銷等應用程式,探索及探索資料集中的複雜關係,例如客戶資料、社群網路及財務交易。此高效能圖表功能提供進階圖表查詢語言支援、開發人員 API 和分析功能,以及近 60 種預先建置的演算法。

Oracle Database 12。2 提供包括 PGQL (特性圖表查詢語言) 支援的特性圖表功能。從 Oracle Database 版本 26ai 開始,您也可以使用 SQL (如 SQL:2023 標準中定義) 來建立及查詢特性圖表。

Oracle Graph Server and Client 是與 Oracle Database 中 Property Graph 功能搭配使用的軟體套裝程式。它包含用於執行圖形分析演算法的圖形工具、用戶端程式庫及 Oracle Graph Server。

相關主題