主頁 > 資料庫 > Oracle 存盤程序學習總結

Oracle 存盤程序學習總結

2022-10-24 08:11:48 資料庫

創建/更新存盤程序

基礎基礎用法

創建/修改無參存盤程序

CREATE OR REPLACE PROCEDURE procedure_name [IS|AS]
--宣告全域變數(可選)
BEGIN
--存盤程序的執行體
END; --也可以寫成 END procedure_name;

創建/修改攜引數存盤程序

CREATE OR REPLACE PROCEDURE procedure_name(var_name1 IN type, var_name2 IN type,...,var_nameN OUT type) [IS|AS]
--宣告全域變數(可選)
BEGIN
--存盤程序的執行體
END; --也可以寫成 END procedure_name;

說明:IN 表示輸入引數,OUT表示輸出引數,比如存盤回傳值的變數,IN OUT 表示輸入輸出引數(注:都不區分大小寫)

注意:

  1. 存盤程序引數資料型別不能指定長度
  2. OUT、IN OUT 模式引數的呼叫,必須通過變數實作

呼叫存盤程序

--呼叫帶引數存盤程序
CALL procedure_name([引數串列]);
--或者
BEGIN procedure_name(引數串列); END; --注意 分號不能少,特別是END后面的分號
--或者
SQL> EXEC procedure_name(引數串列);  --在命令列視窗執行,比如SQLPlus執行視窗

--呼叫不帶引數存盤程序
CALL procedure_name();
--或者
BEGIN procedure_name; END; --注意 分號不能少,特別是END后面的分號
--或者
BEGIN procedure_name(); END; --注意 分號不能少,特別是END后面的分號
--或者
SQL> EXEC procedure_name;

簡單的示例

創建攜帶引數存盤程序

CREATE OR REPLACE PROCEDURE SP_TEST_PROC(workDate IN Date) is
BEGIN
dbms_output.put_line('The input date is:'||to_date(workDate,'yyyy-mm-dd'));
END;

CALL SP_TEST_PROC(sysdate); --輸出:The input date is:22-AUG-24

--創建攜帶回傳值存盤程序
CREATE OR REPLACE PROCEDURE SP_SUM_PROC(number1 IN NUMBER, number2 IN NUMBER, result OUT NUMBER) is
BEGIN
result := number1 + number2;
END;

-- sql視窗中呼叫
DECLARE res NUMBER(6);
BEGIN 
  SP_SUM_PROC(1, 3, res); 
  dbms_output.put_line(res); --輸出:4
END; 

-- 命令列視窗中呼叫
SQL> VARIABLE res NUMBER;
SQL> EXEC SP_SUM_PROC(1, 3, :res);
PL/SQL procedure successfully completed
res
---------
4

--創建帶輸入輸出引數的存盤程序
CREATE OR REPLACE PROCEDURE SP_SUM_PROC(number1 IN NUMBER, number2 IN OUT NUMBER) is
BEGIN
number2 := number1 + number2;
END;

-- 呼叫
DECLARE num NUMBER(6) :=3; --注意,不能在存盤程序中宣告變數時這樣賦值
BEGIN 
  dbms_output.put_line('呼叫前num變數值:' || num); --輸出:呼叫前num變數值:3
  SP_SUM_PROC(1, num); 
  dbms_output.put_line('呼叫后num變數值:' || num); --輸出:呼叫后num變數值:4
END; 

DECLARE基礎用法說明

可以在BEGIN關鍵字之前,使用DECLARE定義、宣告區域變數,宣告基礎用法如下:

DECLARE 變數名[,變數名2...] 資料型別(含長度、精度) [DEFAULT value]; --沒有使用DEFAULT子句時,默認值為NULL

示例:

DECLARE num INT  DEFAULT 10; --宣告變數 num,資料型別為INT型,默認值為10
DECLARE usrname VARCHAR2(15) DEFAULT 'tester'; --宣告變數 username,默認值為tester
DECLARE age, num int; -- 定義多個變數
DECLARE length, width NUMBER(18,2) DEFAULT 10; -- 宣告變數 length, width,默認值都為10
BEGIN
-- do something
END;

創建無引數存盤程序

CREATE OR REPLACE PROCEDURE SP_TEST_PROC is
BEGIN
dbms_output.put_line('hello, tester');
END;

--呼叫
CALL SP_TEST_PROC(); --輸出:hello, tester
--或者
BEGIN
SP_TEST_PROC;
END;

宣告全域變數

方式一:直接宣告資料型別

格式:變數名 資料型別(大小及精度)

示例:

v_username VARCHAR2(15);
v_num NUMBER(9,2);

方式二:使用%TYPE宣告

格式:變數名 表名.欄位名%TYPE

含義:該變數的資料型別與指定表的指定欄位的資料型別一致

示例:

r_carrierID  CARRIERS.carrier_id%type;

方式三:使用%ROWTYPE宣告

格式:變數名 表名%ROWTYPE

含義:該變數的資料型別與指定表的指定行記錄(所有欄位)的資料型別一致

示例:

V_row_user USERS%ROWTYPE; --V_row_user存放整行資料

注:不管使用哪種宣告方式,變數名都不區分大小寫,以字母開頭;此外,變數的宣告必須在BEGIN關鍵字之前進行,

變數賦值

方式一:使用":="直接賦值

注意,這種方式不適合使用%ROWTYPE宣告的變數

示例:

v_username := 'shouke';

我們可以在宣告變數的同時對變數進行賦值,

v_username VARCHAR2(15) := 'shouke' 

方式二:select 表欄位 into 變數 from 表

1:查詢指定表的某些指定欄位  

不適合使用%ROWTYPE宣告的變數

SELECT field1,field2,...,field3 INTO varName1,varName2,...,varNameN FROM tableName;

2:查詢指定表的所有欄位  

SELECT * INTO v_row_varName FROM tableName; --其中v_row_varName為使用%ROWTYPE宣告的變數

注意:使用這種方式給使用%ROWTYPE宣告的變數賦值時,查詢結果只能回傳一條記錄,且查詢結果必須包含該表的所有欄位,

變數宣告與賦值示例

示例

CREATE OR REPLACE PROCEDURE SP_TEST_PROC IS
v_username VARCHAR2(15);
v_companyCode NUMBER(9,2);
v_erpOrderNo EFFECTIVE_OMS_MSG_FOR_TEST.erp_Orderno%TYPE;
v_record EFFECTIVE_OMS_MSG_FOR_TEST%ROWTYPE;
BEGIN
  v_username := 'shouke';
  SELECT request_msg_id INTO v_companyCode FROM EFFECTIVE_MSG_FOR_TEST WHERE rownum <2;
  SELECT erp_orderno INTO v_erpOrderNo FROM EFFECTIVE_MSG_FOR_TEST WHERE rownum <2;
  SELECT * INTO v_record FROM EFFECTIVE_MSG_FOR_TEST WHERE rownum <2;

  dbms_output.put_line('v_username: ' || v_username);
  dbms_output.put_line('v_companyCode: ' || v_companyCode);
  dbms_output.put_line('v_erpOrderNo: ' || v_erpOrderNo);
  dbms_output.put_line('v_record.company_code: ' || v_record.company_code); 

END;

call SP_TEST_PROC();

注意:

  • 采用變數名.表欄位名的方式來參考通過%ROWTYPE宣告的變數
  • 不能直接使用變數名作為查詢列,錯誤用法形如 SELECT v_erpOrderNo FROM EFFECTIVE_MSG_FOR_TEST;

一個應用實體

--創建序列
CREATE SEQUENCE check_orders_seq
increment By 1 
start With 1
Maxvalue 2000
Minvalue 1
cycle
Nocache;

--創建存盤程序
CREATE OR REPLACE PROCEDURE "SP_GET_CHECK_ORDERS_FOR_TEST" (IN_serverID IN VARCHAR2, IN_rowLimit IN INT, OUT_returnCode OUT VARCHAR2)
IS
sqlStr VARCHAR2(5000);
BEGIN
  OUT_returnCode := '000';

  --將揀貨完成未復核,且未在臨時表check_orders_for_test的訂單拉入臨時表
  sqlStr := 'insert into check_orders_for_test(warehouseID, orderNo, rangeNo, checkFlag, serverID) select h.warehouseID, h.orderNo, check_orders_seq.nextval rangeNo, ''N'' checkFlag,'''||IN_serverID||''' serverID 
               from doc_order_header h 
               where h.sostatus = ''60'' 
               and exists (select 1 from act_allocation_details a 
                           where a.orderNo = h.orderNo
                           and a.packflag = ''N'') 
               and not exists (select 1 from check_orders_for_test m 
                               where m.orderno = h.orderno) 
               and rownum <= '||IN_rowLimit;
  execute immediate sqlStr;
  commit;
  Return;
EXCEPTION
  WHEN OTHERS THEN
    OUT_returnCode := 'SP_GET_CHECK_ORDERS_FOR_TEST' || SQLerrm; 
    dbms_output.put_line(OUT_returnCode);
    ROLLBACK;
END;

說明:兩個''表示一個'

執行體之邏輯判斷陳述句

IF陳述句

基礎用法

IF 條件運算式 THEN
  -- do something
END IF;
IF 條件運算式 THEN
  -- do something
ELSE
  -- do something
END IF;
IF 條件運算式 THEN
  -- do something
ELSIF 條件運算式 THEN
  -- do something
... --表省略,支持更多的ELSIF
ELSE --子句可選
  -- do something
END IF;

示例

CREATE OR REPLACE PROCEDURE SP_TEST_PROC(num IN NUMBER) IS
BEGIN
  --如果num為1,則輸出true
  IF num=1 THEN
    BEGIN
      dbms_output.put_line('true');
    END;
  END IF;
END;

CALL SP_TEST_PROC(1);

CREATE OR REPLACE PROCEDURE SP_TEST_PROC(num IN NUMBER) IS
BEGIN
  IF NUM=1 THEN --如果num為1,則輸出 true
    dbms_output.put_line('true');
  ELSE --否則輸出 false
    dbms_output.put_line('false');
  END IF;
END;

CREATE OR REPLACE PROCEDURE SP_TEST_PROC(num IN NUMBER) IS
BEGIN
  IF NUM=1 THEN --如果num為1,則輸出 true
    dbms_output.put_line('true');
  ELSIF NUM=0 THEN --否則,如果num為2,則輸出 false
    dbms_output.put_line('false');
  ELSE --否則輸出 invalid num
    dbms_output.put_line('invalid num');
  END IF;
END;

CASE WHEN陳述句

基礎用法

CASE 
  WHEN num=1 THEN 
    --do something
  WHEN num=2 THEN 
    --do something
  ... --表省略,支持更多的WHEN
  ELSE 
    --do something
END CASE;

示例

CREATE OR REPLACE PROCEDURE SP_TEST_PROC(num IN NUMBER) IS
BEGIN
  CASE 
    WHEN num=1 THEN  --如果num為1,則輸出 true
      dbms_output.put_line('true');
    WHEN num=2 THEN  --如果num為1,則輸出 false
      dbms_output.put_line('false');
    ELSE --否則輸出 invalid num
      dbms_output.put_line('invalid num');
  END CASE;
END;

執行體之回圈遍歷陳述句

FOR回圈

基礎用法

FOR var IN range LOOP
--do something
END LOOP;

--遍歷查詢結果集
FOR row IN (查詢陳述句) LOOP
--do something
END LOOP;

--回圈遍歷陣列

--回圈遍歷游標(使用示例參見下文 執行體之游標)

示例

CREATE OR REPLACE PROCEDURE SP_TEST_PROC IS
BEGIN
  -- FOR i IN REVERSE 0..5 LOOP --REVERSE 采用逆序,從大到小,i取值從5到0
  FOR i IN 0..5 LOOP -- i取值從0到5
    dbms_output.put_line('運行第' || i || '次');
  END LOOP;
END;

CALL SP_TEST_PROC();

運行輸出:

運行第0次
運行第1次
運行第2次
運行第3次
運行第4次
運行第5次

遍歷查詢結果集

CREATE OR REPLACE PROCEDURE SP_TEST_PROC IS
BEGIN
  FOR cur_row IN (SELECT request_msg_id, erp_orderno FROM effective_oms_msg_for_test WHERE ROWNUM<5)
  LOOP
    dbms_output.put_line('msg_id: ' || cur_row.request_msg_id || ' orderno: ' || cur_row.erp_orderno);    
  END LOOP;
END;

CALL SP_TEST_PROC();

WHILE回圈

基礎用法

WHILE 條件陳述句 LOOP
-- do something
END LOOP;

示例

CREATE OR REPLACE PROCEDURE SP_TEST_PROC IS
i INT :=1 ;
BEGIN
  WHILE i < 3 LOOP
    dbms_output.put_line('運行第' || i || '次');
    i := i + 1;
  END LOOP;
END;

CALL SP_TEST_PROC();

呼叫輸出

運行第1次
運行第2次

LOOP回圈

基礎用法

LOOP
  --do something
  IF 退出回圈條件 THEN
    --do something
    EXIT;
  END IF;
  --do something
END LOOP;
LOOP
  --do something
  EXIT WHEN 退出回圈條件;
  --do something
END LOOP;

示例

CREATE OR REPLACE PROCEDURE SP_TEST_PROC IS
i INT :=1;
BEGIN
  LOOP
    IF i=3 THEN --如果i=3,則退出
      EXIT;
    END IF;
    dbms_output.put_line('運行第' || i || '次');
    i := i + 1;
  END LOOP;
END;
CREATE OR REPLACE PROCEDURE SP_TEST_PROC IS
i INT :=1;
BEGIN
  LOOP
    EXIT WHEN i = 3;
    dbms_output.put_line('運行第' || i || '次');
    i := i + 1;
  END LOOP;
END;

呼叫結果,同上述WHILE回圈示例

執行體之GOTO跳轉陳述句

基礎用法

<<gotoLabel>>
-- do something
GOTO gotoLabel;

示例

CREATE OR REPLACE PROCEDURE SP_TEST_PROC IS
i int := 1;
BEGIN
  <<loop_lable>>
  dbms_output.put_line('運行第' || i || '次');
  i := i + 1;
  IF i < 3 THEN
    GOTO loop_lable;
  END IF;
END;

呼叫結果,同上述WHILE回圈示例

說明:如上,我們也可以利用GOTO陳述句來實作回圈

執行體之游標

基礎用法

CURSOR型游標

CREATE OR REPLACE PROCEDURE SP_TEST_PROC IS
CURSOR cursor_name IS 查詢陳述句;  -- 定義CURSOR型別游標(不能用于引數傳遞)
BEGIN
    FOR varName IN cursor_name LOOP 
    --do something --參考變數 varName.field
    END LOOP;
END;

注意:通過以上方式,采用FOR回圈遍歷游標,會自動關閉游標,不需要在END LOOP; 后添加關閉游標的代碼CLOSE cursor_name;,會報錯

示例

CREATE OR REPLACE PROCEDURE SP_TEST_PROC IS
CURSOR cursor_for_msgs IS SELECT request_msg_id, erp_orderno FROM effective_msg_for_test WHERE ROWNUM<5;
BEGIN
  FOR msg IN cursor_for_msgs LOOP
    dbms_output.put_line('msg_id: ' || msg.request_msg_id || ' orderno: ' || msg.erp_orderno);
  END LOOP;
END;

SYS_REFCURSOR型游標

SYS_REFCURSOR型游標,該游標是Oracle以預先定義的游標,可作出引數進行傳遞

基礎用法

CREATE OR REPLACE PROCEDURE SP_TEST_PROC IS
v_cursor_name SYS_REFCURSOR ;
--變數定義
BEGIN
  OPEN v_cursor_name FOR 查詢陳述句;
  LOOP
    FETCH v_cursor_name INTO 變數1, 變數2, ..., 變數N; --變數個數和查詢結果記錄包含的欄位數量保持一致
    EXIT WHEN v_cursor_name%NOTFOUND;
  END LOOP;
  CLOSE v_cursor_name; 
END; 

說明: SYS_REFCURSOR中可使用三個狀態屬性:

  • %NOTFOUND 表示未找到記錄資訊
  • %FOUND 表示找到記錄資訊
  • %ROWCOUNT 表示當前游標所指向的行位置
  • %ISOPEN 如果游標已經打開,則回傳TRUE,否則回傳FALSE

注意:

  • SYS_REFCURSOR游標只能通過OPEN方法來打開和賦值

  • SYS_REFCURSOR游標只能通過FETCH INTO方法來遍歷取值

示例

CREATE OR REPLACE PROCEDURE SP_TEST_PROC IS
v_cursor_for_msgs SYS_REFCURSOR ;
v_request_msg_id VARCHAR2(20);
v_erp_orderno VARCHAR2(50);
BEGIN
  OPEN v_cursor_for_msgs FOR SELECT request_msg_id, erp_orderno FROM effective_msg_for_test WHERE ROWNUM<5;
  LOOP
    FETCH v_cursor_for_msgs INTO v_request_msg_id, v_erp_orderno;
    EXIT WHEN v_cursor_for_msgs%NOTFOUND;
    dbms_output.put_line('msg_id: ' || v_request_msg_id || ' orderno: ' || v_erp_orderno);    
  END LOOP;
  -- 注意,上述回圈執行完成后,Orable并沒有自動關閉游標,需要顯示關閉游標
  IF v_cursor_for_msgs%ISOPEN THEN
    dbms_output.put_line('CLOSING CURSOR');
    CLOSE v_cursor_for_msgs;
  END IF;  
END; 

顯示關閉游標

CLOSE cursor_name;

洗掉存盤程序

基礎語法

DROP PROCEDURE procedure_name;

作者:授客
微信/QQ:1033553122
全國軟體測驗QQ交流群:7156436

Git地址:https://gitee.com/ishouke
友情提示:限于時間倉促,文中可能存在錯誤,歡迎指正、評論!
作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額隨意,您的支持將是我繼續創作的源動力,打賞后如有任何疑問,請聯系我!!!
           微信打賞                        支付寶打賞                  全國軟體測驗交流QQ群  
              

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/519099.html

標籤:其他

上一篇:MySQL資料庫規范

下一篇:ClickHouse(08)ClickHouse表引擎概況

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more