欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Oracle 筆記(八)、PL/SQL 高級應用(游標、存儲過(guò)程、函數、程序包) - 黃小二的讀書(shū)筆記 - BlogJava


一、游標
二、存儲過(guò)程
三、函數
    過(guò)程與函數的異同
四、程序包



    游標是一種 PL/SQL 控制結構,可以對SQL語(yǔ)句的處理進(jìn)行顯式控制,便于對表的數據逐條進(jìn)行處理。
ps.當表中數據量大的時(shí)候,不建議使用游標(效率不高,耗費資源),但是它能逐條取數據方法靈活。
    游標是記錄的指針,利用游標對活動(dòng)集的更新或刪除會(huì )反饋到表的記錄上。

游標屬性:%FOUND、%NOTFOUND、%ROWCOUNT、%ISOPEN


1、顯式游標
    顯式游標是由用戶(hù)顯式聲明的游標。根據在游標中定義的查詢(xún),查詢(xún)返回的行集可以包含零或多行,這些行稱(chēng)為活動(dòng)集。游標將指向活動(dòng)集中的當前行。

顯式游標操縱過(guò)程:聲明、打開(kāi)、從游標中獲取記錄、關(guān)閉。
SET SERVEROUTPUT ON;
DECLARE
  CURSOR cur IS
    SELECT * FROM books;
  myrecord books%ROWTYPE;
BEGIN
  OPEN cur;
  LOOP
    FETCH cur INTO books;
    EXIT WHEN cur%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(books.id || ' ' || books.name);
  END LOOP;
  CLOSE cur;
END;

1.1、帶參數的顯式游標:參數不需指定長(cháng)度或者精度。
1.2、FOR 循環(huán)游標:采用遍歷方式,自動(dòng)打開(kāi)、提取和關(guān)閉游標。(能否利用 %ROWCOUNT 獲得游標提取的行數?)
DECLARE
  /* 定義帶參數游標 */
  CURSOR cur_para(id varchar2) IS
  SELECT books_name FROM books WHERE books_id = id;
BGEIN
  /* 調用帶參數游標,并以 FOR 循環(huán)方式處理 */
  FOR cur IN cur_para('0001') LOOP
    DBMS_OUTPUT.PUT_LINE(cur.books_id || ' ' || cur.books_id);
  END LOOP;
END;
1.3、使用顯示游標刪除或更新記錄
定義時(shí):需使用 SELECT ... FOR UPDATE 語(yǔ)句表示事物的鎖定;
執行時(shí):需使用 WHERE CURRENT OF curXXX 子句指定游標的當前行。

  /* 定義部分 */
  CURSOR cur IS
  SELECT name FROM deptment FOR UPDATE;
....
  /* 執行部分 */
  UPDATE deptment SET name=name || '_tt' WHERE CURRENT OF cur;


2、隱式游標
不需聲明,打開(kāi)和關(guān)閉的游標。PL/SQL 為所有的 SQL 數據操縱語(yǔ)句隱式聲明游標,它是不能直接命名和控制。
BEGIN
  FROM cur IN (SELECT name FROM deptment) LOOP
    DBMS_OUTPUT.PUT_LINE(cur.books_id || ' ' || cur.books_id);
  END LOOP;
END;

ps.
匿名塊:每次執行時(shí)都需要被編譯,并且無(wú)法存儲到數據庫中,別的 PL/SQL 塊也無(wú)法調用它。
命名塊:存儲在數據庫中,屬于數據庫對象。

排錯:SHOW ERRORS PROCEDURE/FUNCTION/PACKAGE obj_name;



二、存儲過(guò)程
CREATE OR REPLACE PROCEDURE test (value IN varchar2, value2OUT NUMBER)
  /* 參數,不需指定長(cháng)度或精度 */
IS
  /* 局部變量,省略 DECLARE 關(guān)鍵字,需有長(cháng)度 */
  identity NUMBER;
BEGIN
  SELECT ITEMRATE INTO identity
    FROM itemFile
    WHERE itemcode = value;
  IF identity < 200 THEN
    value2 := 200;
  ELSE
    value2 :=50;
  END IF;
END;

● 匿名塊執行過(guò)程
DECLARE
  tvalue2 NUMBER;
BEGIN
  test('i202', tvalue2);
  DBMS_OUTPUT.PUT_LINE('value2的值為:' || TO_CHAR(value2));
END;
● 單獨執行
    EXECUTE myproc('0001');



三、函數
    函數的主要特性是它必須返回一個(gè)值。創(chuàng )建函數時(shí)通過(guò) RETURN 子句指定函數返回值的數據類(lèi)型。
函數的一些限制:
  ● 函數只能帶有 IN 參數,不能帶有 IN OUT 或 OUT 參數。
  ● 形式參數必須只使用數據庫類(lèi)型,不能使用 PL/SQL 類(lèi)型。
  ● 函數的返回類(lèi)型必須是數據庫類(lèi)型。
CREATE OR REPLACE FUNCTION item_price_rage (price NUMBER)
   /* 參數、指定返回類(lèi)型 */
  RETURN varchar2
AS
   /* 定義局部變量 */
  min_price NUMBER;
  max_price NUMBER;
BEGIN
  SELECT MAX(ITEMRATE), MIN(ITEMRATE) INTO max_price, min_price
    FROM itemfile;
  IF price >= min_price AND price <= max_price THEN
    RETURN '輸入的單價(jià)介于最低價(jià)與最高價(jià)之間';
  ELSE
    RETURN '超出范圍';
  END IF;
END;

● 匿名塊執行函數
DECLARE
  p NUMBER := 300;
  MSG varchar2(200);
BEGIN
  MSG := item_price_range(p);
  DBMS_OUTPUT.PUT_LINE(MSG);
END;
● SELECT查詢(xún)調用(因為函數必須有返回值)
    SELECT myfunction FROM dual;



   過(guò)程與函數的異同
過(guò)程:
    作為 PL/SQL 語(yǔ)句執行;
    在規范中不包含 RETURN 子句;
    不返回任何值(只有輸入/輸出參數,結果集);
    可以包含 RETURN 語(yǔ)句,但是與函數不同,它不能用于返回值。
函數:
    作為表達式的一部分調用;
    必須在規范中包含 RETURN 子句;
    必須返回單個(gè)值;
    必須包含至少一條 RETURN 語(yǔ)句。



四、程序包
    程序包是一種數據庫對象,它是對相關(guān) PL/SQL 類(lèi)型、子程序、游標、異常、變量和常量的封裝。
程序包規范:聲明類(lèi)型、變量、常量、異常、游標和子程序。
程序包主體:用于實(shí)現在程序包規范中定義的游標、子程序。


4.1、程序包規范
包含應用程序所需的程序包資源,是與應用程序的接口。
CREATE OR REPLACE PACKAGE pack_me
IS
  PROCEDURE order_proc (orno varchar2);
  FUNCTION order_fun (ornos varchar2) RETURN varchar2;
END pack_me;
*創(chuàng )建 pack_me 包,并聲明了子程序 order_proc 和 order_fun,并交由程序包主體實(shí)現。


4.2、程序包主體
當程序包規范中指定了子程序和游標時(shí),必須有程序包主體。
CREATE OR REPLACE PACKAGE BODY pack_me
AS
  /* 實(shí)現定義的存儲過(guò)程 */
  PROCEDURE order_proc (orno varchar2)
  IS
    stst CHAR(1);
  BEGIN
    SELECT ostatus INTO stat FROM order_master
      WHERE orderno = orno;
    IF stat = 'p' THEN
      DBMS_OUTPUT.PUT_LINE('暫掛的訂單');
    ELSE
      DBMS_OUTPUT.PUT_LINE('已完成的訂單');
    END IF;
  END order_proc;
  /* 實(shí)現定義的函數 */
  FUNCTION order_fun(ornos varchar2) RETURN varchar2
  IS
    icode varchar2(5);
    ocode varchar2(5);
    qtyord NUMBER;
    qtydeld NUMBER;
  BEGIN
    SELECT qty_ord, qty_deld, itemcode, ordernc INTO qtyord, qtydeld,icode, ocode
      FROM order_detail
      WHERE orderno = ornos;
    IF qtyord < qtydeld THEN
      RETURN ocode;
    ELSE
      RETURN icode;
    END IF;
  END order_fun;
END pack_me;

● 要執行 pack_me包中的 order_proc過(guò)程,輸入
    EXECUTE pack_me.order_proc('o002');

● 要執行包中預定義的函數
DECLARE
  msg varchar2(10);
BEGIN
  msg := pack_me.order_fun('o002');
  DBMS_OUTPUT.PUT_LINE('值是 ' || msg);
END;
 
4.3、程序包的優(yōu)點(diǎn)
    程序包將相關(guān)的功能在邏輯上組織在一起,模塊化,信息隱藏和更好的性能。
ps.數據字典視圖 USER_SOURCE 包含存儲過(guò)程的代碼文本。


4.4、內置程序包
STANDARD 和 DBMS_STANDARD:定義和擴展 PL/SQL 語(yǔ)言環(huán)境
DBMS_LOB:提供對 Oracle LOB 數據類(lèi)型進(jìn)行操作的功能
DBMS_LOCK:用戶(hù)定義的鎖
DBMS_OUTPUT:處理 PL/SQL 塊和子程序輸出調試信息
DBMS_SESSION:提供 ALTER SESSION 命令的 PL/SQL 等效功能
DBMS_ROWID:獲得 ROWID 的詳細信息
DBMS_RANDOM:提供隨機數生成器
DBMS_SQL:允許用戶(hù)使用動(dòng)態(tài) SQL,構造和執行任意 DML 或 DDL 語(yǔ)句
DBMS_JOB:提交和管理在數據庫中執行的定時(shí)任務(wù)
DBMS_XMLDOM:用 DOM 模型讀寫(xiě) XML 類(lèi)型的數據
DBMS_XMLPARSER:XML 解析,處理 XML 文檔內容和結構
DBMS_XMLGEN:將 SQL 查詢(xún)結果轉換為規范的 XML 格式
DBMS_XMLQUERY:提供將數據轉換為 XML 類(lèi)型的功能
DBMS_XSLPROCESSOR:提供 XSLT 功能,轉換 XML 文檔
UTL_FILE:用 PL/SQL 程序來(lái)讀寫(xiě)操作系統文本文件
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
不得不會(huì )的Oracle數據庫知識點(diǎn)(四)
ORACLE PL/SQL編程詳解之程序包的創(chuàng )建與應用
Oracle 游標使用總結
動(dòng)態(tài)游標嵌套
cursor 與refcursor及sys_refcursor的區別 - Phoenix_...
Oracle PL/SQL入門(mén)之慨述--(3)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久