补全aaz288 可能有问题的过程 P_COMPL_AAZ288

补全aaz288 可能有问题的过程:

 

 1 /*
 2     add by weiyongle 20160623
 3     失地农民补足aaz288,针对早期导出的数据(只适用于江安县)
 4     经测试:江安县 江安县个体劳动者 这个单位一共2194人,成功修复 2166条 
 5   */
 6   PROCEDURE P_COMPL_AAZ288(PI_DRPH IN VARCHAR2,
 7                            PO_FHZ  OUT VARCHAR2,
 8                            PO_MSG  OUT VARCHAR2) IS
 9   
10     V_CNT_IC51         NUMBER(2);
11     V_CNT_IC5152_TEMP_ NUMBER(2);
12     V_AAZ288           IC51.AAZ288%TYPE;
13     -- 该表 sjql_aac002_tmp 数据 是在 过程 p_compl_aaz288 中插入的数据(根据导入批次号caz005)
14     CURSOR C_LINSHI_ IS
15       SELECT * FROM SJQL_AAC002_TMP A WHERE A.CAZ005 = PI_DRPH;
16     CURSOR C_IC5152_TEMP_ IS
17       SELECT * FROM IC5152_TEMP_ A WHERE A.CAZ005 = PI_DRPH;
18     CURSOR C_IC51 IS
19       SELECT *
20         FROM IC51 A
21        WHERE A.AAC001 IN
22              (SELECT AAC001 FROM SJQL_AAC002_TMP B WHERE B.CAZ005 = PI_DRPH)
23          AND A.BAE001 = '511523';
24   BEGIN
25     -- 初始化
26     PO_FHZ := '1';
27     PO_MSG := 'pkg_sp3_sdnmsjql.p_compl_aaz288补全aaz288成功:';
28     FOR V_CUR IN C_IC5152_TEMP_ LOOP
29       SELECT COUNT(1)
30         INTO V_CNT_IC51
31         FROM IC51 A
32        WHERE A.AAC001 = V_CUR.AAC001
33          AND A.AAE016 = '1'
34             -- altered by weiyongle 20160722 临时增加
35          AND A.AAE013 LIKE '%导入%'
36          and rownum = '1'
37       --   AND A.AAE013 LIKE '%导入%'
38       ;
39       SELECT COUNT(1)
40         INTO V_CNT_IC5152_TEMP_
41         FROM IC5152_TEMP_ A
42        WHERE A.AAC001 = V_CUR.AAC001
43          and a.caz005 = PI_DRPH;
44       -- 如果ic51只有一条 且 导出的excel数据也是一条,那么就认为这两条记录关联,然后对aaz288进行补全
45       IF V_CNT_IC51 = V_CNT_IC5152_TEMP_ AND V_CNT_IC51 = 1 THEN
46         SELECT AAZ288
47           INTO V_AAZ288
48           FROM IC51
49          WHERE AAC001 = V_CUR.AAC001
50            AND AAE016 = '1'
51               -- add by weiyongle 20160722 临时增加 
52            AND AAE013 LIKE '%导入%'
53            and rownum = '1'
54         --   AND AAE013 LIKE '%导入%'
55         ;
56         UPDATE IC5152_TEMP_ A
57            SET A.AAZ288 = V_AAZ288
58          WHERE AAC001 = V_CUR.AAC001;
59         -- 没有修复成功的 查询语句 select * from IC5152_TEMP_ where aaz288 is null;
60       END IF;
61     END LOOP;
62   EXCEPTION
63     WHEN NO_DATA_FOUND THEN
64       PO_FHZ := 'pkg_sp3_sdnmsjql.p_compl_aaz288_99';
65       PO_MSG := '失地农民数据清理导入保存异常:' || SQLERRM;
66       RETURN;
67   END;

 

`ufshcd_compl_one_cqe` 是 Linux 内核中用于处理 UFS(Universal Flash Storage)设备驱动的一个函数。它通常出现在 UFS Host Controller Driver(UFSHCD)中,用于完成一个命令队列条目(CQE, Command Queue Entry)的处理。 ### 背景知识 UFS 是一种高速存储接口标准,用于移动设备和嵌入式系统中。Linux 内核中,`ufshcd` 是 UFS 主机控制器驱动的核心模块,它负责与 UFS 设备进行通信,包括命令发送、中断处理、错误恢复等。 在 UFS 中,命令队列机制(CQ, Command Queue)允许主机控制器一次性提交多个命令,提高并发性和性能。每个命令对应一个 CQE(Command Queue Entry)。 ### 函数作用:`ufshcd_compl_one_cqe` 这个函数的作用是标记一个 CQE 为完成,并触发相应的完成处理流程。它通常在中断处理中被调用,当控制器完成一个命令后通知驱动程序。 下面是该函数在 Linux 内核源码中可能的简化版本(基于 `drivers/scsi/ufs/ufshcd.c`): ```c void ufshcd_compl_one_cqe(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) { unsigned long flags; spin_lock_irqsave(hba->host->host_lock, flags); if (!test_bit(lrbp->task_tag, &hba->outstanding_reqs)) { dev_err(hba->dev, "CQE for invalid request (tag %d)\n", lrbp->task_tag); spin_unlock_irqrestore(hba->host->host_lock, flags); return; } /* Clear the outstanding request bit */ clear_bit(lrbp->task_tag, &hba->outstanding_reqs); /* Complete the request */ if (likely(lrbp->cmd)) { scsi_dma_unmap(lrbp->cmd); /* Unmap DMA */ lrbp->cmd->result = DID_OK << 16; lrbp->cmd->scsi_done(lrbp->cmd); } spin_unlock_irqrestore(hba->host->host_lock, flags); } ``` ### 函数解析: 1. **参数说明**: - `hba`: Host Bus Adapter 结构体,代表 UFS 控制器。 - `lrbp`: Logical Request Block Pointer,代表一个逻辑请求块,包含命令信息。 2. **锁机制**: - 使用 `spin_lock_irqsave` 保证多线程环境下的安全访问。 3. **有效性检查**: - 检查 `task_tag` 是否在 `outstanding_reqs` 中,确保该请求仍在等待处理。 4. **清除标志位**: - 使用 `clear_bit` 清除该请求的待处理标志。 5. **DMA 解映射**: - 使用 `scsi_dma_unmap` 解除 DMA 映射,释放资源。 6. **命令完成回调**: - 设置命令结果为成功(`DID_OK`),然后调用 `scsi_done` 回调函数通知 SCSI 子系统命令完成。 ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值