Oracle(PLSQL)入門學習七

来源:https://www.cnblogs.com/bibi-feiniaoyuan/archive/2020/05/05/oracle_seven.html
-Advertisement-
Play Games

學習視頻:https://www.bilibili.com/video/BV1tJ411r7EC?p=74 設計資料庫步驟: 良好的資料庫設計:節省空間,數據完整,方便開發。 步驟:1、收集信息 2、標識實體 3、標識實體屬性 4、標識實體之間的關係 5、畫E-R圖,編寫Sql 概念瞭解: 映射基數 ...


學習視頻:https://www.bilibili.com/video/BV1tJ411r7EC?p=74

設計資料庫步驟:

良好的資料庫設計:節省空間,數據完整,方便開發。

步驟:1、收集信息 2、標識實體 3、標識實體屬性 4、標識實體之間的關係 5、畫E-R圖,編寫Sql

概念瞭解:

  • 映射基數有一對一、一對多、多對一、多對多。
  • 三大範式:每列是不可再分的數據單元,例如“地址列”內容“中國北京”可以拆分“國家列”和“城市列”;每個表只描述一件事情。列和主鍵要有直接的關係,不能間接相關。

PL/SQL:

是一種過程語言,與結構化SQl結合的編程語言,對SQL語句的擴展。分為三個部分:聲明,執行,異常。如果沒有東西要聲明可以不寫declare,不捕獲異常可以不寫exception。註釋分分單行“--”和多行“/**/”,變數標識符最大長度31。

變數的聲明以“變數名 類型 := 值”,註意“:=”是賦值用的,而“=”是判斷用的。如果要聲明常量,在變數名後加關鍵字“constant”即“變數名 constant 類型 := 值”,聲明常量必須賦值。

 

屬性類型:

屬性類型有%Type、%RowType。應該瞭解的常見類型有:number(整型和浮點)、char、varchar2(可變長度)、date、boolean、binary_integer(整型)。“%Type”用於引用表格欄位的類型,用法“表名.列名%Type”。

declare
  name varchar2(20) := '資料庫';
  i constant number :=3;
  salary emp.sal%type:=1000;
begin
  dbms_output.put_line(name || 'hahhah');
end;

record類型,就像定義C#中的類

declare
  type student is record(
  stuid emp.empno%type,
  stuname emp.ename%type
  );
  stu student;
begin
  stu.stuid:=11;
  stu.stuname:='bibi';
  dbms_output.put_line('學號' || stu.stuid);
end;

%rowtype ,就是一種引用表的record類型。

declare
  stu emp%rowtype; --emp是一個表,使用rowtype獲取表的行類型。stu其實就是record類型
begin
  stu.empno := 5555;
  stu.ename := 'bibi';
  dbms_output.put_line(stu.empno || stu.ename);
  select * into stu from emp where empno=7369;
   dbms_output.put_line(stu.empno || stu.ename);
end;

 table類型,類似C#的字典類型。

declare
  type myTable is table of number index by binary_integer;
  tableone myTable;
  x number;
begin
  tableone(0) := 100;
  tableone(1) := 200;
  tableone(2) := 200;
  tableone(4) := 200;
  tableone(3) := 200;
  dbms_output.put_line(tableone(0) || tableone(1));
  x := tableone.first(); --獲取第一個key
  dbms_output.put_line('第一個key' || x);
  x := tableone.next(x); --獲取當前key的下一個key
  dbms_output.put_line('第一個key的下一個key' ||  x);
  x := tableone.last(); --獲取最後一個key 
  dbms_output.put_line('(自動)排序最後的一個key' || x);
end;

變數作用域:

declare
  i number := 90;
begin
  declare
  j number :=100;
  begin
    dbms_output.put_line(j); --使用內層變數
    dbms_output.put_line(i); --使用外層變數
    end;
end;

if分支:if...elsif..else ;if...;if...else..;if....elsif...elsif...各種組合。

declare
  i number := 10;
begin
  if i > 30 then
    dbms_output.put_line('ok啊');
  elsif i > 5 then  -- 註意是 elsif
    dbms_output.put_line('也ok啊');
  else --註意沒有then
    dbms_output.put_line('不ok啊');
  end if;
end;
/

declare
  i number := 10;
begin
  if i > 30 then
    dbms_output.put_line('ok啊'); 
  else --註意沒有then
    dbms_output.put_line('不ok啊');
  end if;
end;
/

declare
  i number := 10;
begin
  if i > 30 then
    dbms_output.put_line('ok啊');   
  end if;
end;
/

null值不參與比較運算,不會出現運算結果。如果用在if比較判斷分支里,只能進else。

簡單迴圈:loop...exit when;... end loop;要寫退出條件,不然會陷入死迴圈。

declare
  i number := 0;
begin
  loop
    dbms_output.put_line(i);
    i := i + 1;
    exit when i = 10; --不寫退出條件,會陷入死迴圈。
    --i := i + 1; 也可以在這裡寫條件
  end loop;
end;

普通迴圈:使用while,條件前置了。

declare
  i number := 0;
begin
  while i < 100 loop
    if mod(i, 2) = 0 then
      dbms_output.put_line(i);
    end if;
    i := i + 1;
  end loop;
end;

for迴圈:for的變數只能自增。但使用reverse,可以反轉增長的序列。

begin
  for i in 1 .. 10 loop
    dbms_output.put_line(i);
  end loop;
end;
/
begin
  for i in reverse 1 .. 10 loop
    dbms_output.put_line(i);
  end loop;
end;
/

多重迴圈:如果要退出外層迴圈,應給外層迴圈起別名,“exit 外層迴圈”,純粹的exit只能退出當前迴圈。

declare
  x number := 1;
  y number := 1;
begin
  <<wai>>
  while x <= 10 loop
    dbms_output.put_line('----' || x);
    y := 1;
    while y <= 5 loop
      dbms_output.put_line(y);
      if x = 7 and y = 3 then
        exit wai; --退出外層迴圈
      end if;
      y := y + 1;
    end loop;
    x := x + 1;
  end loop;
end;

goto:跳轉,繞道而行。

begin
  dbms_output.put_line('1');
  dbms_output.put_line('2');
  dbms_output.put_line('3');
  goto hi;
  dbms_output.put_line('4');
  dbms_output.put_line('5');
  <<hi>>
  dbms_output.put_line('6');
  dbms_output.put_line('7');
end;
begin
  dbms_output.put_line('1');
  dbms_output.put_line('2');
  dbms_output.put_line('3');
  goto hi;
  dbms_output.put_line('4');
  dbms_output.put_line('5');
  <<hi>>
  null; 
end;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • using System; using System.Collections.Generic; using System.IO.Ports; using System.Text; //串口通訊類 public class SerialPortManager { //聲明一個靜態的串口資源 priva ...
  • 在資料庫的數據日積月累的積累下,業務資料庫中的單表數據想必也越來越大,大到百萬、千萬、甚至上億級別的數據,這個時候就很有必要進行資料庫讀寫分離、以及單表分多表進行存儲,提高性能 ...
  • 更安全的rm命令,保護重要數據 網上流傳的安全的rm,幾乎都是提供一個rm的"垃圾"回收站,在伺服器環境上來說,這實非良方。 我想,提供一個安全的rm去保護一些重要的文件或目錄不被刪除,避免出現重要數據誤刪的悲劇,或許才是更佳方案。 我寫了一個腳本:https://github.com/malong ...
  • Linux常用命令 一、控制台相關命令 控制台命令就是指通過字元界面輸入的可以操作系統的命令。我們現在要瞭解的是基於Linux操作系統的基本控制台命令。不同於圖形模式的一種類似文本編輯器的運行命令的環境。在遠程登陸控制或是操作沒有圖形環境的Linux系統時,控制台命令就有很大的用途了,建議大家一定要 ...
  • 本文主要講解如何安裝VM插件實現高級功能(下篇) 上篇主要講WndowsOS下利用VM虛擬機部署MACOS ...
  • 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 ...
  • “一段數據流從應用程式發送端,一直到應用程式接收端,總共經過了多少次拷貝?” 先看發送端,當應用程式將數據送到發送緩衝區時,調用的是 send 或 write 方法,如果緩存中沒有空間,系統調用就會失敗或者阻塞。我們說,這個動作事實上是一次”顯式拷貝“。而在這之後,數據將會按照 TCP/IP 的分層... ...
  • 初步進入Linux世界 一、Linux目錄介紹 1.樹型目錄結構 Linux文件系統採用了多級目錄的樹型層次結構管理文件。樹型結構的最上層是根目錄,用/表示。在根目錄之下是各層目錄和文件。 2.工作目錄與用戶主目錄 當登錄Linux時,首先進入到一個特殊的目錄,稱為主/登錄目錄。可以通過~來指定(或 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...