`
逆风的香1314
  • 浏览: 1430163 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

触发器实现字符串处理及统计

阅读更多

原帖地址:

http://community.csdn.net/Expert/topic/3269/3269542.xml?temp=8.726138E-02

table1
序号  类别 起始号  终止号  总数  已用票号        已用票数  结余票号              结余票数 组合编号(主键)
1     A    0000001 0000005  5    0000001,0000003  2     0000002,0000004,0000005  3  
A-0000001-0000005 
2     B    0000006 00000010 5    0000006,0000008  2      0000007,0000009,0000010  3       B-0000006-0000010
table2
组合编号            类别    票号  
A-0000001-0000005   A       0000001
A-0000001-0000005   A       0000003
B-0000006-0000010   B       0000006
B-0000006-0000010   B       0000008

希能在table2写触发器更新table1已用票号,已用票数,结余票号,结余票数的字段。

--------------------------------------------------------------------------------------------------------------------


--示例

--示例数据
create table table1(序号 int,类别 varchar(10),起始号 char(7),终止号 char(7),总数 int,已用票号 varchar(8000),已用票数 int,结余票号 varchar(8000),结余票数 int,组合编号 varchar(20))
insert table1 select 1,'A','0000001','0000005',5,'',0,'0000001,0000002,0000003,0000004,0000005',5,'A-0000001-0000005'
union  all    select 2,'B','0000006','0000010',5,'',0,'0000006,0000007,0000006,0000009,0000010',5,'B-0000006-0000010'

create table table2(组合编号 varchar(20),类别 varchar(10),票号 char(7))
go

--处理的触发器
create trigger tr_process on table2
for insert,update,delete
as
declare @组合编号 varchar(20)
 ,@sta varchar(8000),@nma int
 ,@stb varchar(8000),@nmb int

--处理被删除的
select d.组合编号,d.票号
 ,已用票号=','+a.已用票号+',',a.已用票数
 ,结余票号=a.结余票号,a.结余票数
into #d
from deleted d,table1 a
where d.组合编号=a.组合编号
order by d.组合编号,d.票号

if @@rowcount>0
begin
 update #d set
  @sta=replace(
   case 组合编号 when @组合编号 then @sta else 已用票号 end,
   ','+票号+',',','),
  @nma=case 组合编号 when @组合编号 then @nma-1 else 已用票数-1 end,
  @stb=case 组合编号 when @组合编号 then @stb+','
   else case 结余票号 when '' then '' else 结余票号+',' end end+票号,
  @nmb=case 组合编号 when @组合编号 then @nmb+1 else 结余票数+1 end,
  @组合编号=组合编号,
  已用票号=@sta,已用票数=@nma,
  结余票号=@stb,结余票数=@nmb

 update a set 已用票号=case b.已用票数 when 0 then ''
   else substring(b.已用票号,2,len(b.已用票号)-2) end
  ,已用票数=b.已用票数
  ,结余票号=b.结余票号
  ,结余票数=b.结余票数
 from table1 a,#d b,(
  select 组合编号,已用票数=min(已用票数)
  from #d
  group by 组合编号
 )c where a.组合编号=b.组合编号
  and c.组合编号=b.组合编号
  and c.已用票数=b.已用票数
end

--处理新增的
select i.组合编号,i.票号
 ,已用票号=a.已用票号,a.已用票数
 ,结余票号=','+a.结余票号+',',a.结余票数
into #i
from inserted i,table1 a
where i.组合编号=a.组合编号
order by i.组合编号,i.票号

if @@rowcount>0
begin
 set @组合编号=null
 update #i set
  @sta=case 组合编号 when @组合编号 then @sta+','
   else case 已用票号 when '' then '' else 已用票号+',' end end+票号,
  @nma=case 组合编号 when @组合编号 then @nma+1 else 已用票数+1 end,
  @stb=replace(
   case 组合编号 when @组合编号 then @stb else 结余票号 end,
   ','+票号+',',','),
  @nmb=case 组合编号 when @组合编号 then @nmb-1 else 结余票数-1 end,
  @组合编号=组合编号,
  已用票号=@sta,已用票数=@nma,
  结余票号=@stb,结余票数=@nmb

 update a set 已用票号=b.已用票号
  ,已用票数=b.已用票数
  ,结余票号=case b.结余票数 when 0 then ''
   else substring(b.结余票号,2,len(b.结余票号)-2) end
  ,结余票数=b.结余票数
 from table1 a,#i b,(
  select 组合编号,已用票数=max(已用票数)
  from #i
  group by 组合编号
 )c where a.组合编号=b.组合编号
  and c.组合编号=b.组合编号
  and c.已用票数=b.已用票数
end
go

--插入数据测试
insert table2 select 'A-0000001-0000005','A','0000001'
union  all    select 'A-0000001-0000005','A','0000003'
union  all    select 'B-0000006-0000010','B','0000006'
union  all    select 'B-0000006-0000010','B','0000008'

--删除测试
delete from table2 where 票号='0000008'

--更新测试
update table2 set 票号='0000008' where 票号='0000006'
go

--显示处理结果
select * from table1
go

--删除测试
drop table table1,table2

/*--测试结果(自己看)--*/

分享到:
评论

相关推荐

    Oracle触发器与存储过程高级编程

    这个运算符用于处理字符字符串和CLOB数据。在Oracle中,通常使用双竖线(`||`)作为连接运算符。根据表3-3的描述,`||`将两个字符字符串或CLOB数据连接在一起。如果两个字符串都是CHAR类型,结果将是CHAR类型且长度...

    经典SQL脚本大全

    │ │ 3.5.5 字符串处理示例--列车车次查询.sql │ │ 3.6.2 字符串在编号查询中的应用示例及常见问题.sql │ │ 3.6.3 动态参数的存储过程示例.sql │ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │...

    联发科2022数字芯片提前批07.14.pdf

    - 掌握C语言的基本语法和字符串处理能力,能够完成字符统计的任务。 - 在Python中,熟悉文件操作、异常处理和字符串处理函数,能够完成相对复杂的文本处理任务。 #### 5. Python语言应用 **列表切片** - 理解Python...

    MySQL数据库操作练习题及答案(以员工信息数据库为例)经典.rar

    这份"MySQL数据库操作练习题及答案(以员工信息数据库为例)经典.rar"资料,旨在帮助学习者深入理解和掌握MySQL的各种核心功能,包括数据的过滤、连接、分组、聚合、子查询、字符串处理、表操作以及触发器的使用。...

    FPGA视频处理 进行挖方框 字符叠加

    在FPGA视频处理中,Verilog代码会定义逻辑门、触发器、移位寄存器等基本组件,以及更复杂的模块如计数器、比较器、加法器等,用于实现上述功能。 5. **时序控制**:视频信号处理需要精确的时序控制,以确保每一帧...

    Sqlserver2000经典脚本

    统计一个表中某个字符出现最多的字母.sql │ 非法字符串处理.sql │ ├─第04章 │ │ 4.1.5 在各种处理中应用排序规则的示例.sql │ │ 4.2.1 排序规则在拼音处理中的应用.sql │ │ ...

    what a good day of today

    总的来说,这些文件覆盖了SQL中的多个关键概念,包括存储过程、分页、字符串处理、联合查询、多表统计、日期比较、层级数据处理和性能优化等。这些都是数据库开发和管理中的核心技能,对于任何数据库管理员或SQL...

    统计代码

    学习这部分内容,你需要理解SQL的基本语法,尤其是SELECT、FROM、WHERE、GROUP BY和HAVING子句,以及如何处理字符串类型的数据。同时,了解如何在数据库环境中设置和调度自动执行的任务也是重要的。 总的来说,这个...

    sql大全(本人多年积累精华)

    9. **分割字符串.txt**:在SQL中,字符串分割通常用到STRING_SPLIT()函数(SQL Server 2016及以上版本)或其他自定义方法,可能记录了如何拆分字符串并处理每个部分的方法。 10. **遍历数据库.txt**:这可能涉及...

    oracle函数大全中文api文档

    3. **字符串处理函数**: LIKE和REGEXP_LIKE用于模式匹配,SUBSTR截取字符串,INSTR查找子串位置,CONCAT连接字符串,UPPER和LOWER转换大小写,REPLACE替换字符串中的特定字符。 4. **转换函数**: TO_NUMBER将...

    oracle常用函数总结

    同时,结合存储过程和触发器,可以在数据处理中实现更复杂的业务逻辑。对于数据库管理员和开发者来说,这些都是日常工作中不可或缺的技能。通过不断学习和实践,你将能够更好地驾驭Oracle数据库系统。

    oracle提取汉字拼音和首字母

    总的来说,"oracle提取汉字拼音和首字母"的PL/SQL存储过程提供了一种在Oracle数据库内处理中文字符的解决方案,它涉及到了字符串处理、文本解析和自定义函数等技术,对于处理中文数据的应用场景具有很高的实用价值。...

    ORACLE函数库中文手册

    Oracle函数库包括了大量用于数据处理、查询优化、日期操作、数学计算、字符串处理等领域的函数。以下是一些关键知识点的概述: 1. **数据类型转换函数**:如TO_CHAR、TO_DATE和TO_NUMBER,它们允许我们将数据从一种...

    java(oracle).docx

    5. **字符串处理函数**: - `INITCAP`首字母大写。 - `TRIM/LTRIM/RTRIM`用于去除字符串两端的空白字符,但不是所有数据库都支持,标准SQL中没有这些函数。 - `LPAD/RPAD`用于填充或截断字符串。 - `LEADING/...

    Teradata sql 说明书

    2. 字符串函数:如CONCAT(连接字符串)、SUBSTR(截取子串)、REPLACE(替换子串)、TRIM(去除空白字符)等,方便处理文本数据。 3. 日期/时间函数:如CURRENT_DATE(获取当前日期)、CURRENT_TIME(获取当前时间...

    PowerPro_指令与功能块

    **PowerPro** 的外部指令主要由不同的库提供,这些指令能够实现更高级的功能,如字符串处理、位操作、版本信息查询等。 ##### 1. 字符串处理指令 - **结合字符串指令 (CONCAT)**:连接两个或多个字符串。 - **删除...

    SQL和Oracle数据库函数说明

    例如,你可以用`SELECT COUNT(*) FROM table`统计表中的记录数,`SELECT MAX(column) FROM table`找出某列的最大值,或者使用`SELECT column1 || ' ' || column2 FROM table`将两列数据连接成一个字符串。...

    Sybase参考手册-函数

    2. **字符串函数**:涉及字符串的处理,如拼接、截取、查找、替换、转换大小写等,帮助开发者处理和操作文本数据。 3. **日期/时间函数**:处理日期和时间的函数,如获取当前日期、时间戳转换、日期加减、时间间隔...

    SQL Server 2012 T-SQL Recipes (高清原版)

    9. 字符串处理:讲述了如何使用T-SQL对字符串进行各种操作,包括字符串函数和转换。 10. 日期和时间:详细阐述了处理日期和时间数据的函数和方法。 11. 数字处理:涉及在SQL Server中对数字数据类型的操作和函数。...

Global site tag (gtag.js) - Google Analytics