zoukankan      html  css  js  c++  java
  • 存儲過程返回數據集到delphi的TQuery

    場景:

    1、我們經常因為需求要用到一些比較複雜的sql語句查詢出一個用戶需要的數據集,有時候無奈寫出了一個又長又難度的sql語句,數據庫服務器解析查詢耗費大量時間和資源,儘管我們可能查詢出來的結果只是很少的,我們如果把這個sql語句一步一步寫出來,執行,結果花費極少的時間但串到一起執行,就非常無奈了。

    2、我們無法寫出一條sql語句,達到用戶希望得到的數據集。

    解決:

      把多個sql語句寫到存儲過程,delphi通過TQuery調用存儲過程,得到一個數據集。

    測試:

    1)建立一個包,主要定義一個通用的ref cursor 的類型,這個類型用於存儲過程返回數據集用的

    create or replace package CommonPackage is

    type ResultSet is ref cursor;

    end CommonPackage ;

    2)一下是一個測試的存儲過程例子

    CREATE OR REPLACE PROCEDURE kevin_test_select_p(

    a IN INT, --這裡測試用,沒有任何意義,驗證當真正需要傳入參數也可通過

    r OUT CommonPackage.ResultSet  --重要,是返回結果集到delphi的TQuery控件的輸出參數

    ) AS

    BEGIN

      OPEN r FOR  -- 通過輸出參數r返回一下查詢的結果集

      SELECT * FROM R_WIP_TRACKING_T WHERE ROWNUM<100;

    END;

    3)Delphi 裏面的TQuery.SQL 參數 如下圖:

    然後在代碼裏面給出輸入參數

    要注意的是輸出的參數,返回數據集的

    最後就是調用的代碼啦(注意,用於返回數據集的參數無須處理),以下:

    Query1.Close();

    Query1.ParamByName(‘a’).AsInteger := 0;

    Query1.Open();

    上述驗證通過

  • 相关阅读:
    03_02_leetcode_24_删除有序数组的重复项
    03_02_leetcode_141_环形链表
    03_02_leetcode_24_两两交换链表中的结点
    Solution -「ZJOI 2014」力
    Solution -「GXOI / GZOI 2019」宝牌一大堆
    Solution -「CSP 2019」Centroid
    Solution -「CSP 2019」Partition
    Note -「Suffix Automaton」SAM
    Solution -「BalticOI 2004」Sequence
    Solution -「BZOJ 3779」重组病毒
  • 原文地址:https://www.cnblogs.com/KevinHo/p/2548039.html
Copyright © 2011-2022 走看看