PLSQL語法入門--PL/SQL 基礎詳解

PL/SQL 基礎詳解

PL/SQL(Procedural Language for SQL)是 Oracle 數據庫中的一種過程式語言,它擴展了 SQL 的功能,允許開發者編寫復雜的程序邏輯。

一、匿名塊

解釋

匿名塊是 PL/SQL 的基本執行單位,它是一段獨立的 PL/SQL 代碼,沒有名稱,不能被其他程序調用,主要用于測試和臨時操作。

語法格式

[DECLARE]-- 聲明變量、游標等
BEGIN-- 執行 SQL 語句和 PL/SQL 代碼
EXCEPTION-- 處理異常
END;

使用

DECLAREnum NUMBER := 10;
BEGINDBMS_OUTPUT.PUT_LINE('num = ' || num);
END;

二、存儲過程

解釋

存儲過程是一組為了完成特定功能的 SQL 語句集,經編譯后存儲在數據庫中,可以通過名稱調用執行。

語法格式

CREATE [OR REPLACE] PROCEDURE 過程名 (參數列表)
IS-- 聲明部分
BEGIN-- 執行部分
EXCEPTION-- 異常處理部分
END;

使用

CREATE OR REPLACE PROCEDURE add_proc (a IN NUMBER, b IN NUMBER, c OUT NUMBER)
IS
BEGINc := a + b;
END;

三、函數

解釋

函數與存儲過程類似,但函數必須返回一個值,通常用于計算并返回結果。

語法格式

CREATE [OR REPLACE] FUNCTION 函數名 (參數列表)
RETURN 返回類型
IS-- 聲明部分
BEGIN-- 執行部分RETURN 返回值;
EXCEPTION-- 異常處理部分
END;

使用

CREATE OR REPLACE FUNCTION max_proc (a IN NUMBER, b IN NUMBER)
RETURN NUMBER
IS
BEGINIF a > b THENRETURN a;ELSERETURN b;END IF;
END;

四、觸發器

解釋

觸發器是當對表進行某種操作(如 INSERT、UPDATE、DELETE)時自動執行的 PL/SQL 程序。

語法格式

CREATE [OR REPLACE] TRIGGER 觸發器名
{BEFORE | AFTER} 觸發事件
ON 表名
[FOR EACH ROW]
DECLARE-- 聲明部分
BEGIN-- 執行部分
END;

使用

CREATE OR REPLACE TRIGGER update_trigger
AFTER UPDATE ON employees
FOR EACH ROW
BEGINDBMS_OUTPUT.PUT_LINE('員工信息已更新');
END;

五、變量聲明和數據類型

解釋

在 PL/SQL 中,可以在 DECLARE 部分聲明變量,并為其指定數據類型,用于存儲臨時數據。

語法格式

DECLARE變量名 數據類型;

使用

DECLAREnum NUMBER(5);name VARCHAR2(20);hiredate DATE;
BEGINnum := 100;name := '張三';hiredate := SYSDATE;
END;

六、條件語句

解釋

條件語句用于根據不同的條件執行不同的代碼塊,實現分支邏輯。

語法格式

IF 條件 THEN-- 語句塊 1
ELSIF 條件 THEN-- 語句塊 2
ELSE-- 語句塊 3
END IF;

使用

DECLAREnum NUMBER := 60;
BEGINIF num >= 60 THENDBMS_OUTPUT.PUT_LINE('及格');ELSEDBMS_OUTPUT.PUT_LINE('不及格');END IF;
END;

七、循環語句

解釋

循環語句用于重復執行一段代碼,直到滿足特定條件為止。

語法格式

-- 基本循環
LOOP-- 語句塊EXIT WHEN 條件;
END LOOP;-- WHILE 循環
WHILE 條件 LOOP-- 語句塊
END LOOP;-- FOR 循環
FOR 循環變量 IN 范圍 LOOP-- 語句塊
END LOOP;

使用

DECLAREnum NUMBER := 1;
BEGINWHILE num <= 5 LOOPDBMS_OUTPUT.PUT_LINE(num);num := num + 1;END LOOP;
END;

八、游標

解釋

游標用于處理 SELECT 語句返回的多行記錄,允許逐行處理查詢結果。

語法格式

-- 聲明游標
CURSOR 游標名 ISSELECT 語句;-- 打開游標
OPEN 游標名;-- 提取數據
FETCH 游標名 INTO 變量;-- 關閉游標
CLOSE 游標名;

使用

DECLARECURSOR emp_cursor ISSELECT employee_id, last_name FROM employees;emp_record emp_cursor%ROWTYPE;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursor INTO emp_record;EXIT WHEN emp_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(emp_record.employee_id || ' ' || emp_record.last_name);END LOOP;CLOSE emp_cursor;
END;

九、異常處理

解釋

異常處理用于處理程序運行時出現的錯誤,確保程序的健壯性和穩定性。

語法格式

BEGIN-- 代碼
EXCEPTIONWHEN 異常名 THEN-- 處理代碼WHEN OTHERS THEN-- 處理代碼
END;

使用

DECLAREnum NUMBER := 0;
BEGINIF num = 0 THENRAISE DIVIDE_BY_ZERO;END IF;
EXCEPTIONWHEN DIVIDE_BY_ZERO THENDBMS_OUTPUT.PUT_LINE('除數不能為零');
END;

十、內置函數

解釋

PL/SQL 提供了豐富的內置函數,用于處理字符串、數值、日期等數據類型。

語法格式

函數名(參數);

使用

DECLAREstr VARCHAR2(20) := 'Hello, World!';
BEGINDBMS_OUTPUT.PUT_LINE(LENGTH(str)); -- 計算字符串長度DBMS_OUTPUT.PUT_LINE(UPPER(str)); -- 將字符串轉換為大寫
END;

十一、存儲過程和函數的調用

解釋

存儲過程和函數可以通過特定的語法進行調用,以執行其內部的邏輯。

語法格式

-- 調用存儲過程
EXECUTE 存儲過程名(參數);-- 調用函數
函數名(參數);

使用

-- 調用存儲過程
EXECUTE add_proc(10, 20, :result);-- 調用函數
DECLAREmax_num NUMBER;
BEGINmax_num := max_proc(10, 20);DBMS_OUTPUT.PUT_LINE('最大值為:' || max_num);
END;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76836.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76836.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76836.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle--用戶管理

前言&#xff1a;本博客僅作記錄學習使用&#xff0c;部分圖片出自網絡&#xff0c;如有侵犯您的權益&#xff0c;請聯系刪除 用戶管理在 Oracle 數據庫中至關重要。一個服務器通常只運行一個 Oracle 實例&#xff0c;而一個 Oracle 用戶代表一個用戶群&#xff0c;他們通過該用…

UOS+N 卡 + CUDA 環境下 X86 架構 DeepSeek 基于 vLLM 部署與 Dify 平臺搭建指南

一、文檔說明 本文檔是一份關于 DeepSeek 在X86架構下通vLLM工具部署的操作指南&#xff0c;主要面向需要在UOSN卡CUDA環境中部署DeepSeek的技術人員&#xff0c;旨在指導文檔使用者完成從 Python 環境升級、vLLM 庫安裝、模型部署到 Dify 平臺搭建的全流程操作。 二、安裝Pyt…

操作系統之shell實現(下)

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 種一棵樹最好是十年前&#xff0c;其次是現在&#xff01; &#x1f680; 今天來學習C語言的相關知識。 &#x1f44d; 如果覺得這篇文章有幫助&#xff0c;歡迎您一鍵三連&#xff0c;分享給更…

Spark,流量統計案例

提前創好一個文件夾分為四個類 FlowBean中的代碼內容為&#xff1a;package org.example.flow; import org.apache.hadoop.io.Writable; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; //hadoop 序列化 //三個屬性&#xff1a;手機…

下載油管視頻 - yt-dlp

文章目錄 1. yt-dlp與you-get介紹1.1 主要功能對比1.2 使用場景1.3 安裝 2. 基本命令介紹2.1 默認下載視頻2.2 指定畫質和格式規則2.3 下載播放列表2.4 備注 3. 參考資料 之前只使用you-get下載b站視頻&#xff0c;當時了解you-get也可下載油管視頻&#xff0c;但之前無此需求&…

基于javaweb的SSM+Maven教材管理系統設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

VS2022+QT環境配置及基本操作

參考文章 2025最新&#xff01;Visual Studio 2022 QT6.7 環境配置全攻略&#xff1a;一鍵搞定安裝與亂碼問題&#xff0c;開發效率翻倍&#xff01;&#xff08;全網最詳細教程&#xff0c;手把手教你搭建完美開發環境&#xff01;&#xff09;_vs2022 qt-CSDN博客 下載QT …

使用percona-toolkit同步mysql表數據

背景 做了主備mysql的配置以后&#xff0c;可能因為切換過程造成不一致的情況&#xff0c;這個時候可以處理的方式是全量導入再導出&#xff0c;這個有個問題就是操作的數據太多了 我們只需要數據補全同步即可 mysql的同步是基于binlog的&#xff0c;如果沒有記錄的部分的數據…

MDG 實現后端主數據變更后快照自動刷新的相關設置

文章目錄 前言實現過程BGRFC期初配置&#xff08;可選&#xff09;設置 MDG快照 BGRFC維護BP出站功能模塊 監控 前言 眾所周知&#xff0c;在MDG變更請求創建的同時&#xff0c;所有reuse模型實體對應的快照snapshot數據都會記錄下來。隨后在CR中&#xff0c;用戶可以修改這些…

重裝系統 之 Dell戴爾服務器 PowerEdge R750xs + window server2012r2 || 2016

因要求需要給新服務器裝個 win server2012或者2016系統 XXX使用U盤制作PE系統U盤安裝系統不行&#xff0c;適合普通win8&#xff0c;win10&#xff0c;win11U盤制作PE系統U盤安裝win10系統教程U盤制作PE系統U盤安裝win10系統教程https://mp.weixin.qq.com/s/t0W8aNJaHPAU8T78nh…

基于Spring Security 6的OAuth2 系列之二十六 - 終章

之所以想寫這一系列&#xff0c;是因為之前工作過程中使用Spring Security OAuth2搭建了網關和授權服務器&#xff0c;但當時基于spring-boot 2.3.x&#xff0c;其默認的Spring Security是5.3.x。之后新項目升級到了spring-boot 3.3.0&#xff0c;結果一看Spring Security也升級…

一鍵配置多用戶VNC遠程桌面:自動化腳本詳解

在當今遠程工作盛行的時代,高效且安全地管理多用戶遠程桌面訪問變得至關重要。本文將介紹一個強大的自動化腳本,該腳本能夠快速創建用戶并配置VNC遠程桌面環境,大大簡化了系統管理員的工作。 一、背景介紹 在Linux系統中,手動配置VNC服務器通常需要執行多個步驟,包括創建…

IOT項目——雙軸追光系統

雙軸太陽能追光系統 - ESP32實現 系統概述 這個系統使用&#xff1a; ESP32開發板2個舵機&#xff08;水平方向和垂直方向&#xff09;4個光敏電阻&#xff08;用于檢測光照方向&#xff09;適當的電阻&#xff08;用于光敏電阻分壓&#xff09; 接線示意圖 --------------…

Maven集成模塊打包使用

文章目錄 1.問題思考&#xff08;如何對集成模塊進行打包&#xff09;2.問題解決 &#xff08;如何對集成模塊進行打包&#xff09;3.使用者使用該jar包(jar包安裝本地倉庫和使用) 1.問題思考&#xff08;如何對集成模塊進行打包&#xff09; 思考&#xff1a;假設有這么一個場…

OpenVINO教程(二):圖片目標檢測推理應用

YOLO模型物體檢測 下面是一個簡單的python程序,他的功能是使用yolo11n模型對coco_bike.jpg照片進行檢測,并顯示檢測結果 代碼步驟如下: coco_bike.jpg照片加載yolo模型使用模型進行detect推理顯示推理結果 下面是完整的代碼 from pathlib import Pathimport urllib.request…

聚類算法(K-means、DBSCAN)

聚類算法 K-means 算法 算法原理 K-means 是一種基于類內距離最小化的劃分式聚類算法&#xff0c;其核心思想是通過迭代優化將數據劃分為 K 個簇。目標函數為最小化平方誤差&#xff08;SSE&#xff09;&#xff1a; S S E ∑ i 1 K ∑ x ∈ C i ∣ ∣ x ? μ i ∣ ∣ 2…

Oracle在ERP市場擊敗SAP

2024年&#xff0c;甲骨文&#xff08;Oracle&#xff09;以87億美元的ERP收入和6.63%的市場份額&#xff0c;首次超越SAP&#xff0c;成為全球最大的ERP應用軟件供應商&#xff0c;結束了SAP自上世紀80年代以來在該領域的長期霸主地位。據APPS RUN THE WORLD的市場調研&#x…

嵌入式面試高頻筆試題目解析

一、基礎概念與 C 語言核心題 1. 指針與內存操作 典型題目: char str[] = "hello"; char *ptr = "world"; str[0] = H; // 合法嗎? ptr[0] = W; // 合法嗎?為什么?解析: str 是棧上數組,可修改內容,str[0]=H 合法。ptr 指向常量字符串區,修改會…

【Python】Selenium切換網頁的標簽頁的寫法(全!!!)

在使用selenium做網站爬取測試的時候&#xff0c;我們經常會遇到一些需要點擊的元素&#xff0c;才能點擊到我們想要進入的頁面&#xff0c; 于是我們就要模擬 不斷地 點點點擊 鼠標的樣子。 這個時候網頁上就會有很多的標簽頁&#xff0c;你的瀏覽器網頁標簽欄 be like: 那…

MySQL GTID模式主從同步配置全指南:從配置到故障轉移

前言 MySQL主從復制是企業級數據庫架構的基礎&#xff0c;而GTID(Global Transaction Identifier)模式則是MySQL 5.6版本后推出的革命性復制技術。本文將詳細介紹如何配置基于GTID的主從同步&#xff0c;并包含實用的故障轉移操作指南。 一、GTID模式核心優勢 相比傳統基于…