線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:759
推到 Plurk!
推到 Facebook!

有誰可解釋這兩個interbase的預儲程序之執行流程,因我看不懂?

答題得分者是:Mickey
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-04 18:27:45 IP:203.70.xxx.xxx 未訂閱
我的interbase是6.5版,delphi是7.0專業版, 以下是interbase的EMPLOYEE.GDB(C:\Program Files\Common Files\Borland Shared\Data)的兩個預儲程序有遞迴呼叫,其執行流程,因我看不懂?所以請教大家,若有人看懂請予指教 1. create PROCEDURE FACTORIAL ( NUM INTEGER ) RETURNS ( N_FACTORIAL INTEGER ) AS declare variable num_less_one int; begin if (num =1) then begin n_factorial = 1; exit ; end else begin num_less_one = num - 1; execute procedure factorial num_less_one returning_values n_factorial; n_factorial = n_factorial * num; exit; end end 2. create PROCEDURE DEPT_BUDGET ( DNO CHAR(3) ) RETURNS ( TOT NUMERIC(15, 2) ) AS DECLARE VARIABLE sumb DECIMAL(12, 2); DECLARE VARIABLE rdno CHAR(3); DECLARE VARIABLE cnt INTEGER; BEGIN tot = 0; SELECT budget FROM department WHERE dept_no = :dno INTO :tot; SELECT count(budget) FROM department WHERE head_dept = :dno INTO :cnt; IF (cnt = 0) THEN SUSPEND; FOR SELECT dept_no FROM department WHERE head_dept = :dno INTO :rdno DO BEGIN EXECUTE PROCEDURE dept_budget :rdno RETURNING_VALUES :sumb; tot = tot sumb; END SUSPEND; END ps :執行 DEPT_BUDGET 並傳入100或620或670其結果如下 100 => 7900000 (結果似乎與資料表之資料不相符合) 620 => 2550000 (結果與資料表之資料相符合) 670 => 2460000 (結果與資料表之資料相符合) 搞不懂為何會這樣?
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-05 11:28:52 IP:218.170.xxx.xxx 未訂閱
ry_lee 你好: 1. 應該是算出正整數的階乘值, 5!=5*4*3*2*1, Procedure 名稱取得很正確阿. 2. 應該是算出, 一個部門(含子部門)的總經費. PS. 有些資料庫會限定, Procedure 的遞回呼叫"深度", interbase 我不太清楚.
系統時間:2024-09-10 6:07:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!