Oracle

如何區分 SQL 和 PL/SQL?

  • May 12, 2016

我知道這個問題聽起來可能太愚蠢了,但我一直不明白這部分。

SQL*Plus 適用於 SQL 和 PL/SQL。我如何知道某些程式碼是 SQL 還是 PL/SQL?如果我的程式碼有一個 for 循環,它不再是 SQL 了嗎?

PL/SQL 是 SQL 的擴展,具有循環、條件等。那麼任何 SQL 程式碼都是預設的 PL/SQL 程式碼?不是這樣嗎?

SQL 和 PL/SQL 之間有界限嗎?

兩個區分黑白 SQL 和 PL/SQL 的例子觸發了這個問題:

這兩個 create table 語句有什麼區別?

https://stackoverflow.com/questions/2267386/oracle-11g-varray-of-objects/2267813#2267813

可以肯定的是,這是一個有趣的問題。大多數熟悉 Oracle 開發的人都不會考慮它,但是當你真正理解它時,有時會混淆 SQL 和 PL/SQL 之間的界限。

通過查看首字母縮略詞的定義,您開始了解每個首字母縮寫詞涵蓋的功能領域:

SQL - 結構化查詢語言

PL/SQL - 過程語言/結構化查詢語言

細心的讀者可能會注意到 SQL 是如何出現兩次的 8) 那是因為 SQL 通常嵌入在 PL/SQL 中 - PL/SQL 是一種用於提供專有的第 4 代語言 (4GL)的語言,它與數據庫對像在甲骨文。

維基百科有一些關於SQLPL/SQL的非常好的資料

令人困惑的部分是 PL/SQL 和 SQL 有一點重疊。SQL 的權限包括數據插入、查詢、更新和刪除,即所謂的 DML 或數據操作語言操作,但也包括創建、更改、重命名、刪除這些 DDL 或數據定義語言操作。它在這裡有些人可能會感到困惑。創建儲存過程的操作(使用 PL/SQL 編寫的東西)實際上是 SQL——您使用 SQL 創建代表 PL/SQL 塊的數據庫對象。

同樣,您可以在 PL/SQL 中嵌入 SQL 程式碼。例如,PL/SQL 中的 FOR 循環可以基於 SQL 查詢。有點讓你大吃一驚,嗯?您使用 SQL 創建一個過程,該過程實際上在內部使用 SQL 對數據庫中的記錄執行某些操作。

如果你問我,很酷的東西。

引用自:https://dba.stackexchange.com/questions/1121