有誰可解釋這兩個interbase的預儲程序之執行流程,因我看不懂? |
答題得分者是:Mickey
|
ry_lee
高階會員 ![]() ![]() ![]() ![]() 發表:368 回覆:251 積分:123 註冊:2002-03-19 發送簡訊給我 |
我的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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |