存儲過程返回數據集到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();

 

上述驗證通過

 

转载于:https://www.cnblogs.com/KevinHo/archive/2012/06/13/2548039.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值