PL/SQL筆記(1)-流程式控制制,迴圈,異常,塊

来源:http://www.cnblogs.com/zhxj/archive/2016/01/14/5130785.html
-Advertisement-
Play Games

流程式控制制 1.If,then,else,elsif(不是elseif) if a='1' then null; endif; 2.Case 簡單case表達式: 搜索型Case表達式: 3.goto語句 begin if true then goto label2; end if; > SYS.DB...


流程式控制制

1.If,then,else,elsif(不是elseif)

if a='1' then
  null;
endif;

image

image

image

 

2.Case

簡單case表達式:

image

搜索型Case表達式:

image

 

3.goto語句

begin
if true then
  goto label2;
end if;
<<label1>>
  SYS.DBMS_OUTPUT.PUT_LINE('label1');
  <<label2>>
  SYS.DBMS_OUTPUT.PUT_LINE('label2');
end;

 

迴圈控制

簡單迴圈: Exit,Exit when condition退出迴圈

image

while迴圈:

image

 

for迴圈:兩種,一個是面向數值的for,一種是面向游標的for

面向數值:   (..)是範圍操作符,1..5表示1到5

image

begin
FOR j IN 1..5 LOOP
    dbms_output.Put_line(j);
  END LOOP;
END;
end;

面向游標:

image

declare
cursor myCursor is select * from ouser;
begin
FOR s IN myCursor LOOP
    dbms_output.Put_line(s.userid);
  END LOOP;
END;

continue,continue when語句

結束本輪迴圈;

--只輸出偶數
begin
FOR j IN 1..100 LOOP
    Continue when Mod(j,2)=1;
    dbms_output.Put_line(j);
END LOOP;
end;

異常處理

1.命名異常和匿名異常

命名異常有名字,匿名異常只有異常代碼和消息

SQLCODE函數可以獲取最後一個異常的異常代碼,SQLERRM:異常消息

declare
myexception exception; --聲明一個命名異常
v_row Sys_ACC_User%RowType;
Pragma EXCEPTION_INIT (myexception, -20002);  --將一個命名異常和一個異常代碼綁定
begin
  select * into v_row from Sys_ACC_User where rownum=1;
  raise myexception;   --手動拋出異常
  RAISE_APPLICATION_ERROR(-20001,'這是一個匿名異常,我沒有名字');  --手動拋出一個匿名異常
  Exception
    when no_data_Found then  --捕獲名為no_data_found的異常
      dbms_output.Put_line('not data found'||'異常代碼:'||SQLCODE||'  異常消息'||SQLERRM);
    when myexception then  --捕獲名為 myexception的異常
      dbms_output.Put_line('myexception'||'異常代碼:'||SQLCODE||'  異常消息'||SQLERRM);
    when others then --其他命名異常和匿名異常在這裡捕獲
      dbms_output.Put_line('異常代碼:'||SQLCODE||'  異常消息'||SQLERRM);
end;

 

Oracle塊:

塊組成:塊頭,聲明單元,執行單元,異常處理單元

函數,存儲過程均為塊結構,命名塊

image

create or replace function WordCount(str in varchar2)return number --塊頭
is
  numCount number default:=0;--聲明單元
  begin --執行單元
  return Length(LTrim(str,'0'));
  Exception --異常處理單元
    when others then:
      SYS.DBMS_OUTPUT.PUT_LINE('error');
end ;

匿名塊

匿名塊沒有塊頭

image

declare  --聲明單元
  v_n1 varchar2(100);
begin
  --執行單元
  v_n1:='20';
  SYS.DBMS_OUTPUT.PUT_LINE(v_n1);
  exception --異常處理單元
    when others then
      SYS.DBMS_OUTPUT.PUT_LINE('error');
end;

 

其他:

1.轉義: q’<s’d>’,表示為: s’d  ,<和>必須成對出現,可用(),{},[]等代替

2.Function必須返回值,不想返回值的用Procedure

3.如果Procedure有參數(In/Out),調用方式: ProcedureName(param1,param2);如果procedure沒有參數,則直接: ProcedureName或者ProcedureName(),Function類似…

4.空字元 ’’is Null  =>true

 

 

zhxjdwh:http://www.cnblogs.com/zhxj/


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

-Advertisement-
Play Games
更多相關文章
  • 通過這種方格圖片實現濾鏡代碼:"CIFilter+ColorLUT.h""CIFilter+ColorLUT.m"#import "CIFilter+ColorLUT.h"#import #import @implementation CIFilter (ColorLUT)+ (CIFilter *...
  • 不少設計師和工程師都被安卓設備紛繁的屏幕搞得暈頭轉向,我既做UI設計,也做過一點安卓界面佈局,剛好對這塊內容比較熟悉,也曾在公司內部做過相關的講座,在此,我將此部分知識重新梳理出來分享給大家!
  • iOS開發之 監聽事件全攻略(一)協議代理= 2016年才開始沒幾天,IT業界大事件快播庭審,最近兩天看了快播庭審,真是精彩,王欣辯護人金嘴真是絕了,話說快播辯護人的金嘴,句句金腔,我很贊同辯護人道出當今互聯網業界的一些不合規矩或者不合法律的一些互聯網公司打的擦邊球,拉下幾家知名互聯網公司陪斬,.....
  • 命令模式的定義:將“請求”封裝成對象,以便使用不同的請求、隊列或者日誌來參數化其他對象。命令模式也支持撤銷的操作。註意命令模式是將請求封裝成對象! 其實簡單的說,命令模式就是把方法調用封裝起來了,通過封裝方法調用,可以把運算塊包裝成型,所以調用此運算的對象不需要關心事情是如何進行的,...
  • 1、SwipeBackLayout項目地址:https://github.com/ikew0ng/SwipeBackLayout2、用法android studiocompile 'me.imid.swipebacklayout.lib:library:1.0.0'項目實例package com.e...
  • 什麼是looksalive check和is alive check SQL Server故障轉移集群是建立在windows集群服務上的一種熱備的高可用方案。在集群運行過程中,windows集群服務定期檢測節點的資源健康狀態,如果發生了故障,會根據預先定義的故障轉移策略把SQL Server服務從....
  • 一、什麼是觸發器簡單的說,就是一張表發生了某件事(插入、刪除、更新操作),然後自動觸發了預先編寫好的若幹條SQL語句的執行;二、特點及作用特點:觸發事件的操作和觸發器里的SQL語句是一個事務操作,具有原子性,要麼全部執行,要麼都不執行;作用:保證數據的完整性,起到約束的作用;三、例子:創建觸發器,記...
  • 1 create procedure usp_CallWebServices 2 ( 3 @parameter nvarchar(500)=null 4 ) 5 as 6 Declare @obj int 7 Declare @SvercieUrl nvarchar(200) 8 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...