首頁 資料庫 Oracle 實例講解如何在 Oracle 中建立和執行預存程序

實例講解如何在 Oracle 中建立和執行預存程序

Apr 25, 2023 pm 03:55 PM

Oracle 是一個非常強大的資料庫管理系統,它擁有許多高級的功能和特性,其中預存程序是其中之一。預存程序是一組針對資料庫操作的預先定義的 SQL 語句,它可以儲存在資料庫中,以供以後呼叫使用。

在 Oracle 中,預存程序以 PL/SQL 語言編寫,它是一種結合了 SQL 和程式設計的語言。 PL/SQL 具有很強的資料操作能力和過程控制能力,可以方便地編寫出高效的預存程序來。

預存程序的好處

預存程序的主要好處是可以增加資料庫的執行效率,並減少網路通訊的開銷。因為預存程序已經預先編譯和最佳化,所以在執行時不需要重複進行解析和最佳化,可以直接呼叫執行。此外,預存程序還可以透過參數來實現動態化的操作,不僅可以簡化程式碼,還可以避免 SQL 注入等風險。

預存程序的建立與執行

以下介紹如何在 Oracle 中建立和執行預存程序。

建立預存程序

在Oracle 中,建立預存程序需要使用CREATE PROCEDURE 語句,語法如下:

CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter_name [IN | OUT | IN OUT] parameter_type [, ...])]
[IS | AS]
BEGIN
      pl/sql_code_block;
END [procedure_name];
登入後複製

其中:

  • #CREATE PROCEDURE:建立預存程序的語句。
  • OR REPLACE:可選參數,如果指定了該參數,則表示建立的預存程序已存在時,將其替換。
  • procedure_name:預存程序的名稱。
  • parameter_name:可選的輸入和/或輸出參數,用於指定預存程序的輸入和輸出。
  • parameter_type:參數的類型,可以是資料型別如 VARCHAR2、NUMBER,也可以是遊標類型,如 SYS_REFCURSOR。
  • IS | AS:可選參數,用於指定預存程序的語言類型,IS 表示開始(PL/SQL 區塊),AS 表示結束(PL/SQL 區塊)。
  • pl/sql_code_block:PL/SQL 程式碼區塊,它包含了預存程序的特定邏輯實作。

下面範例程式碼示範如何建立一個簡單的儲存過程,它接受兩個參數並輸出它們的和:

CREATE OR REPLACE PROCEDURE add_nums(
    num1 IN NUMBER,
    num2 IN NUMBER,
    sum OUT NUMBER
)
IS
BEGIN
    sum := num1 + num2;
END add_nums;
登入後複製

執行預存程序

在Oracle 中,執行預存程序需要使用EXECUTE 或EXECUTE IMMEDIATE 語句。例如,執行上述範例程序,可以使用如下的語句:

DECLARE
    result NUMBER;
BEGIN
    add_nums(10, 20, result);
    DBMS_OUTPUT.PUT_LINE('The sum is: ' || result);
END;
登入後複製

這裡我們使用 DECLARE 語句來宣告需要使用的變數 result,並呼叫 add_nums 儲存過程,並將結果輸出到螢幕上。

參數類型

在預存程序中,參數可以是輸入參數、輸出參數或雙向參數。

  • 輸入參數:指定預存程序的輸入。
  • 輸出參數:指定預存程序的輸出。
  • 雙向參數:既可以進行輸入,也可以進行輸出。

宣告參數類型的方法如下:

(param_name [IN | OUT | IN OUT] param_type [, ...])
登入後複製

在這個宣告中,[IN | OUT | IN OUT] 是可選的參數,用來指定參數的型別。如果不指定參數類型,則預設為 IN 類型,即輸入參數。

範例程式碼:

CREATE OR REPLACE PROCEDURE my_proc (
    num IN NUMBER,
    str IN OUT VARCHAR2,
    cur OUT SYS_REFCURSOR
)
IS
BEGIN
    -- 逻辑实现
END my_proc;
登入後複製

在上述程式碼中,我們宣告了一個包含三個參數的預存程序my_proc,第一個參數num 是輸入參數,第二個參數str 是雙向參數,第三個參數cur 是輸出參數。

紀錄集處理

用預存程序來操作資料時常常需要傳回查詢結果清單。 Oracle 提供了兩種類型的紀錄集:遊標和 PL/SQL 表。

遊標

遊標是一種傳回結果集的資料結構,它可以遍歷查詢結果。遊標可以是顯式或隱式的,顯式遊標需要聲明一個遊標變量,並在程式碼中開啟和關閉它,隱式遊標則由 Oracle 自動建立和管理。

下面是一個示範如何使用遊標的預存程序:

CREATE OR REPLACE PROCEDURE get_employee(
    id_list IN VARCHAR2,
    emp_cur OUT SYS_REFCURSOR
)
IS
BEGIN
    OPEN emp_cur FOR 'SELECT * FROM employees WHERE id IN (' || id_list || ')';
END get_employee;
登入後複製

在這個例子中,我們宣告了一個包含兩個參數的預存程序get_employee,它接受一個以逗號分隔的員工ID 清單作為輸入參數,傳回一個包含所選員工資訊的遊標emp_cur。

PL/SQL 表

PL/SQL 表是一種類似陣列的資料結構,它可以儲存一組值。 PL/SQL 表在預存程序中有很多實際應用,例如將一組資料傳遞給預存程序等。

在Oracle 中,可以在預存程序中宣告並使用PL/SQL 表,例如以下程式碼:

CREATE OR REPLACE PACKAGE my_package
IS
    TYPE num_list IS TABLE OF NUMBER INDEX BY PLS_INTEGER;

    PROCEDURE sum_nums(nums IN num_list, sum OUT NUMBER);
END my_package;

CREATE OR REPLACE PACKAGE BODY my_package
IS
    PROCEDURE sum_nums(nums IN num_list, sum OUT NUMBER)
    IS
        total NUMBER := 0;
    BEGIN
        FOR indx IN 1 .. nums.COUNT LOOP
            total := total + nums(indx);
        END LOOP;
        sum := total;
    END sum_nums;
END my_package;
登入後複製

在這裡,我們建立了一個名為my_package 的包,其中聲明了一個名為num_list 的PL/SQL 表類型和一個使用該類型的預存程序sum_nums。 sum_nums 接受一個 num_list 類型的參數,並計算它們的總和。

結論

在 Oracle 中,預存程序是重要的維護資料庫的工具之一,它具有高效的執行能力和動態性。我們也可以透過預存程序讓其執行一些業務邏輯,而不是只執行單一的 SQL 語句,如此能夠提高可重複使用性和可維護性。因為它們可以被儲存在資料庫中,並且能夠被多個應用程式或程序共享和存取。使用預存程序的好處很多,僅靠短短的文章很難覆蓋它們的全部,但是我們相信,只要深入了解和應用,就會在實際工作中獲益匪淺。

以上是實例講解如何在 Oracle 中建立和執行預存程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

oracle數據庫操作工具有哪些內容 oracle數據庫操作工具有哪些內容 Apr 11, 2025 pm 03:09 PM

除了 SQL*Plus,操作 Oracle 數據庫的工具還有:SQL Developer:免費工具,界面友好,支持圖形化操作和調試。 Toad:商業工具,功能豐富,在數據庫管理和調優方面表現出色。 PL/SQL Developer:針對 PL/SQL 開發的工具,代碼編輯和調試功能強大。 Dbeaver:免費開源工具,支持多種數據庫,界面簡潔。

oracle數據庫怎麼學 oracle數據庫怎麼學 Apr 11, 2025 pm 02:54 PM

學習 Oracle 數據庫沒有捷徑,需要理解數據庫概念、掌握 SQL 技能,並通過實踐不斷提升。首先要了解數據庫的存儲和管理機制,掌握表、行、列等基本概念和主鍵、外鍵等約束條件。然後通過實踐,安裝 Oracle 數據庫,從簡單的 SELECT 語句開始練習,逐步掌握各種 SQL 語句和語法。之後,可以學習 PL/SQL 等高級特性,優化 SQL 語句並設計高效的數據庫架構,提升數據庫效率和安全性。

oracle打不開怎麼辦 oracle打不開怎麼辦 Apr 11, 2025 pm 10:06 PM

Oracle 打不開的解決辦法包括:1. 啟動數據庫服務;2. 啟動監聽器;3. 檢查端口衝突;4. 正確設置環境變量;5. 確保防火牆或防病毒軟件未阻止連接;6. 檢查服務器是否已關閉;7. 使用 RMAN 恢復損壞的文件;8. 檢查 TNS 服務名稱是否正確;9. 檢查網絡連接;10. 重新安裝 Oracle 軟件。

oracle如何查表空間大小 oracle如何查表空間大小 Apr 11, 2025 pm 08:15 PM

要查詢 Oracle 表空間大小,請遵循以下步驟:確定表空間名稱,方法是運行查詢:SELECT tablespace_name FROM dba_tablespaces;查詢表空間大小,方法是運行查詢:SELECT sum(bytes) AS total_size, sum(bytes_free) AS available_space, sum(bytes) - sum(bytes_free) AS used_space FROM dba_data_files WHERE tablespace_

oracle怎麼查看數據庫 怎麼查看oracle數據庫 oracle怎麼查看數據庫 怎麼查看oracle數據庫 Apr 11, 2025 pm 02:48 PM

要查看Oracle數據庫,可通過SQL*Plus(使用SELECT命令)、SQL Developer(圖形化界面)、或系統視圖(顯示數據庫內部信息)。基礎步驟包括連接到數據庫、使用SELECT語句篩選數據,以及優化查詢以提高性能。此外,系統視圖提供了數據庫的詳細信息,有助於監控和排除故障。通過實踐和持續學習,可以深入探索Oracle數據庫的奧妙。

oracle游標關閉怎麼解決 oracle游標關閉怎麼解決 Apr 11, 2025 pm 10:18 PM

解決 Oracle 游標關閉問題的方法包括:使用 CLOSE 語句顯式關閉游標。在 FOR UPDATE 子句中聲明游標,使其在作用域結束後自動關閉。在 USING 子句中聲明游標,使其在關聯的 PL/SQL 變量關閉時自動關閉。使用異常處理確保在任何異常情況下關閉游標。使用連接池自動關閉游標。禁用自動提交,延遲游標關閉。

Oracle PL/SQL Deep Dive:掌握過程,功能和軟件包 Oracle PL/SQL Deep Dive:掌握過程,功能和軟件包 Apr 03, 2025 am 12:03 AM

OraclePL/SQL中的過程、函數和包分別用於執行操作、返回值和組織代碼。 1.過程用於執行操作,如輸出問候語。 2.函數用於計算並返回值,如計算兩個數之和。 3.包用於組織相關元素,提高代碼的模塊化和可維護性,如管理庫存的包。

oracle視圖如何加密 oracle視圖如何加密 Apr 11, 2025 pm 08:30 PM

Oracle 視圖加密允許您加密視圖中的數據,從而增強敏感信息安全性。步驟包括:1) 創建主加密密鑰 (MEk);2) 創建加密視圖,指定要加密的視圖和 MEk;3) 授權用戶訪問加密視圖。加密視圖工作原理:當用戶查詢加密視圖時,Oracle 使用 MEk 解密數據,確保只有授權用戶可以訪問可讀數據。

See all articles