zoukankan      html  css  js  c++  java
  • 遍历SnoMed的multiHierarchy中给定概念的子概念

    -- create TABLE

    DROP TABLE IF EXISTS `subTerms`;
    CREATE TABLE `subTerms`(
    `Id` INT(255) NOT NULL AUTO_INCREMENT,
    `termConceptId` varchar(255) DEFAULT '0',
    `terms` varchar (255) DEFAULT '0',
    PRIMARY KEY (`Id`)
    ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;

    DROP TABLE IF EXISTS `targetConceptId`;
    CREATE TABLE `targetConceptId`(
    `ConceptId` varchar(255) DEFAULT '0',
    PRIMARY KEY (`ConceptId`)
    ) ENGINE=INNODB DEFAULT CHARSET=UTF8;

    =======================================

    -- function: traverseOneLayer

    -- hierarchy recursive search
    DROP FUNCTION  IF EXISTS `traverseOneLayer`;
    CREATE FUNCTION  `traverseOneLayer`(sTempChd TEXT ) -- 函数参数
    RETURNS TEXT

    BEGIN
          DECLARE sTemp VARCHAR(255);
            -- DECLARE sTempChd VARCHAR(4000);
            DECLARE cur_end INT DEFAULT 0;
            -- SELECT sourceId from relationship where FIND_IN_SET(destinationId,sTempChd)>0;
            DECLARE cur CURSOR FOR SELECT sourceId from relationship where FIND_IN_SET(destinationId,sTempChd)>0 and typeId='116680003';
            DECLARE CONTINUE HANDLER FOR NOT FOUND SET cur_end = 1;  -- 游标的select语句无查询结果
            OPEN  cur; -- 打开游标
            --
            SET sTempChd='$';  -- 清空
        onelayerLoop:LOOP
                FETCH cur INTO sTemp; -- 把第一行数据(conceptId)写入变量中,游标也随之指向了记录的第一行

                IF cur_end= 1 THEN
                    LEAVE onelayerLoop;      -- 游标循环结束,跳出
                END IF;

          IF not EXISTS(select * from targetConceptId WHERE conceptId=sTemp) THEN   -- 该节点存在表示
                    INSERT INTO targetConceptId(ConceptId) VALUES(sTemp);
                    INSERT INTO subterms(termConceptId, terms) select conceptId,term from description WHERE conceptId=sTemp;
                    SET sTempChd=concat(sTempChd ,',',sTemp);  -- 某一层的子节点串入sTempChd,作为下一次输入
                END IF;    
             END LOOP;
             --
             CLOSE cur;  
     
    RETURN sTempChd;
    END

    ===================================================

    -- procedure: querySubTerms

    DROP PROCEDURE IF EXISTS `querySubTerms`;
    CREATE PROCEDURE `querySubTerms`(startId VARCHAR(255)) -- 函数参数
    -- ETURNS VARCHAR(4000)

    BEGIN
          DECLARE i int;
        DECLARE sTempChd TEXT;
            SET sTempChd =startId;  -- cast(rootId as CHAR); 当前的节点        -- SET i=0;
            TRUNCATE TABLE subterms; -- 清空结果表
            TRUNCATE TABLE targetConceptId;
            INSERT INTO targetConceptId(ConceptId) VALUES(startId);
            INSERT INTO subterms(termConceptId, terms) select conceptId,term from description WHERE conceptId=startId;

        WHILE (sTempChd !='$')  Do  -- 某一层的遍历,sTempChd中是该层所有节点    
                SELECT traverseOneLayer(sTempChd) INTO sTempChd;    -- 调用函数,返回下一层的所有节点
            END WHILE;        
    END

    ==================================

    call querySubTerms(254837009);

  • 相关阅读:
    django的模型层
    django的模版
    SELinux入门基础
    CentOS 7.5上部署Zabbix 3.4
    使用orapki生成证书,配置Oracle数据使用SSL和TLS进行数据库连接的TCP/IP配置==TCPS
    keepalived + LVS实现高可用负载均衡集群
    Linux下LDAP用户认证,自动挂载网络共享文件系统
    编译安装Nginx,配置使用HTTPS
    RSyslog+MySQL+LogAnalyzer
    Bash Shell脚本--复制程序(命令)到指定目录下,同时将其所依赖的库文件复制到对应的目录
  • 原文地址:https://www.cnblogs.com/carol-wei/p/7623107.html
Copyright © 2011-2022 走看看