mysql 遞迴執行個體

來源:互聯網
上載者:User

在Oracle中可以使用CONNECT  BY子句可以輕鬆的實現遞迴查詢,在MSSQLServer和DB2中則可以使用WITH子句來實現遞迴查詢,MYSQL中即不支援CONNECT  BY子句也不支援WITH子句,所以要實現遞迴查詢就必須使用其他的方式來變通實現, 而且實現方案也隨需求的不同而有差異。

下為mysql 使用程式過程的 遞迴執行個體(互連網整理),

1.建立表

DROP TABLE IF EXISTS `item_category`;
CREATE TABLE `item_category` (
`id` int(11) NOT NULL auto_increment,
`catId` int(11) default NULL,
`parentId` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT;

2,插入資料

INSERT INTO `item_category` VALUES (1,1,0);
INSERT INTO `item_category` VALUES (2,2,1);
INSERT INTO `item_category` VALUES (3,3,1);
INSERT INTO `item_category` VALUES (4,4,2);
INSERT INTO `item_category` VALUES (5,5,3);


3.建立預存程序

DELIMITER //
drop procedure if exists findLChild//
CREATE PROCEDURE findLChild(iid bigint(20),layer bigint(20))
BEGIN
create temporary table if not exists tmp_table (id bigint(20));
SET@@max_sp_recursion_depth=99;
call iterative(iid,layer);
select * from tmp_table;
drop temporary table if exists tmp_table;
END;//
DELIMITER ;
DELIMITER //
drop procedure if exists iterative//
CREATE PROCEDURE iterative(iid bigint(20),layer bigint(20))
BEGIN
declare tid bigint(20) default -1;
declare cur1 CURSOR FOR select catId from item_category where parentId=iid;
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tid = null;
if layer > 0 then
OPEN cur1;
FETCH cur1 INTO tid;
WHILE(tid is not null)
DO
insert into tmp_table values(tid);
call iterative(tid,layer-1);
FETCH cur1 INTO tid;
END WHILE;
end if;
END;//
DELIMITER ;


4.調用

call findLChild(1,50);


5 java 調用

用JAVA執行預存程序並取得結果集的代碼如下:
Connection con = new Connection();----假設這裡已經取得一個有效串連.
ResultSet rs=null;
CallableStatement cstm = con.prepareCall("{CALL testrs(?)}");
cstm.setInt(1,2);----將預存程序的第一個參數填儲值2.
boolean bl = cstm.execute();-----執行預存程序
while(bl){----若預存程序成功執行了,並且有結果集返回了,那麼bl就是true
rs=cstm.getResultSet()----取得一個結果集,
while(rs.next()){
System.out.println(rs.getInt(1));--- 隨便輸出一個值。
}
bl=cstm.getMoreResultSet();----若還能取得結果集,則bl=true,這樣就回到迴圈首部,繼續取得結果集進行處理,若不再有結果集了,則bl=false。結果迴圈。
這樣,只要三次迴圈,這個預存程序的三個結果集就可以被分別渠道並處理了。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.