PL/SQL存贮过程:类别链条获取

本文介绍了一个Oracle存储过程,用于从数据库中获取类别链条信息。通过定义游标遍历独立叶结点类别,并递归查找每个类别的父类别直至根节点,形成完整的类别链条。该过程使用了游标、循环和条件判断等结构。

T-SQL同名存储过程的Oracle版,数据表和列相应改变,结构不变

CREATE OR REPLACE PROCEDURE GetCategoryWays
IS
  CACHE_PCID 
number(5);            --缓存PCID
  OUT_STR nvarchar2(500);        --输出的类别链条
  CACHE_PARENTID number(5);        --缓存的父类别ID
  CACHE_CATENAME nvarchar2(20);        --缓存的类别名字
--
-------------------------------------------------------------------------
ExpandedBlockStart.gifContractedBlock.gif
/**//*
* 创建:***
ExpandedBlockStart.gifContractedBlock.gif* 时间:200
*/
0*/**//**
* 用途:获取类别链条 
*/

BEGIN
--声明游标:获取所有独立叶结点类别
  DECLARE CURSOR ENDPOINT_CURSOR IS
  
SELECT B.Category_Code FROM 
  Category A,Category B
  
WHERE A.Category_Parent(+)=B.Category_Code AND 
  A.Category_Code 
IS NULL;
  
  
BEGIN
  
--打开游标
  OPEN ENDPOINT_CURSOR;
  
FETCH ENDPOINT_CURSOR INTO CACHE_PCID;
  
--循环分析PCID、ParentID,获取类别链条
  --获取父类别
  LOOP    FETCH ENDPOINT_CURSOR INTO CACHE_PCID;
  
EXIT WHEN ENDPOINT_CURSOR%NOTFOUND;
    
BEGIN
        
SELECT 
      Category_Parent,Category_Name 
into CACHE_PARENTID,OUT_STR 
      
FROM Category WHERE Category_Code=CACHE_PCID;
        
--开始循环
      LOOP EXIT WHEN CACHE_PARENTID=0;
        
BEGIN
            
SELECT Category_Name into CACHE_CATENAME From Category 
        
WHERE Category_Code=CACHE_PARENTID;
            OUT_STR:
=CACHE_CATENAME||'----'||OUT_STR;
          
SELECT Category_Parent into CACHE_PARENTID FROM Category 
        
WHERE Category_Code=CACHE_PARENTID;
      
END;
      
END LOOP;
      DBMS_OUTPUT.PUT_LINE(OUT_STR);
      
--还原OUT_STR
        OUT_STR:='';
      
END;
  
END LOOP;
  
CLOSE ENDPOINT_CURSOR;
  
END;
END;
---------------------------------------------------------------------------

 

转载于:https://www.cnblogs.com/lixx/archive/2008/07/27/1252675.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值