原帖地址:
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
/*--测试结果(自己看)--*/
分享到:
相关推荐
这个运算符用于处理字符字符串和CLOB数据。在Oracle中,通常使用双竖线(`||`)作为连接运算符。根据表3-3的描述,`||`将两个字符字符串或CLOB数据连接在一起。如果两个字符串都是CHAR类型,结果将是CHAR类型且长度...
│ │ 3.5.5 字符串处理示例--列车车次查询.sql │ │ 3.6.2 字符串在编号查询中的应用示例及常见问题.sql │ │ 3.6.3 动态参数的存储过程示例.sql │ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │...
- 掌握C语言的基本语法和字符串处理能力,能够完成字符统计的任务。 - 在Python中,熟悉文件操作、异常处理和字符串处理函数,能够完成相对复杂的文本处理任务。 #### 5. Python语言应用 **列表切片** - 理解Python...
这份"MySQL数据库操作练习题及答案(以员工信息数据库为例)经典.rar"资料,旨在帮助学习者深入理解和掌握MySQL的各种核心功能,包括数据的过滤、连接、分组、聚合、子查询、字符串处理、表操作以及触发器的使用。...
在FPGA视频处理中,Verilog代码会定义逻辑门、触发器、移位寄存器等基本组件,以及更复杂的模块如计数器、比较器、加法器等,用于实现上述功能。 5. **时序控制**:视频信号处理需要精确的时序控制,以确保每一帧...
统计一个表中某个字符出现最多的字母.sql │ 非法字符串处理.sql │ ├─第04章 │ │ 4.1.5 在各种处理中应用排序规则的示例.sql │ │ 4.2.1 排序规则在拼音处理中的应用.sql │ │ ...
总的来说,这些文件覆盖了SQL中的多个关键概念,包括存储过程、分页、字符串处理、联合查询、多表统计、日期比较、层级数据处理和性能优化等。这些都是数据库开发和管理中的核心技能,对于任何数据库管理员或SQL...
学习这部分内容,你需要理解SQL的基本语法,尤其是SELECT、FROM、WHERE、GROUP BY和HAVING子句,以及如何处理字符串类型的数据。同时,了解如何在数据库环境中设置和调度自动执行的任务也是重要的。 总的来说,这个...
9. **分割字符串.txt**:在SQL中,字符串分割通常用到STRING_SPLIT()函数(SQL Server 2016及以上版本)或其他自定义方法,可能记录了如何拆分字符串并处理每个部分的方法。 10. **遍历数据库.txt**:这可能涉及...
3. **字符串处理函数**: LIKE和REGEXP_LIKE用于模式匹配,SUBSTR截取字符串,INSTR查找子串位置,CONCAT连接字符串,UPPER和LOWER转换大小写,REPLACE替换字符串中的特定字符。 4. **转换函数**: TO_NUMBER将...
同时,结合存储过程和触发器,可以在数据处理中实现更复杂的业务逻辑。对于数据库管理员和开发者来说,这些都是日常工作中不可或缺的技能。通过不断学习和实践,你将能够更好地驾驭Oracle数据库系统。
总的来说,"oracle提取汉字拼音和首字母"的PL/SQL存储过程提供了一种在Oracle数据库内处理中文字符的解决方案,它涉及到了字符串处理、文本解析和自定义函数等技术,对于处理中文数据的应用场景具有很高的实用价值。...
Oracle函数库包括了大量用于数据处理、查询优化、日期操作、数学计算、字符串处理等领域的函数。以下是一些关键知识点的概述: 1. **数据类型转换函数**:如TO_CHAR、TO_DATE和TO_NUMBER,它们允许我们将数据从一种...
5. **字符串处理函数**: - `INITCAP`首字母大写。 - `TRIM/LTRIM/RTRIM`用于去除字符串两端的空白字符,但不是所有数据库都支持,标准SQL中没有这些函数。 - `LPAD/RPAD`用于填充或截断字符串。 - `LEADING/...
2. 字符串函数:如CONCAT(连接字符串)、SUBSTR(截取子串)、REPLACE(替换子串)、TRIM(去除空白字符)等,方便处理文本数据。 3. 日期/时间函数:如CURRENT_DATE(获取当前日期)、CURRENT_TIME(获取当前时间...
**PowerPro** 的外部指令主要由不同的库提供,这些指令能够实现更高级的功能,如字符串处理、位操作、版本信息查询等。 ##### 1. 字符串处理指令 - **结合字符串指令 (CONCAT)**:连接两个或多个字符串。 - **删除...
例如,你可以用`SELECT COUNT(*) FROM table`统计表中的记录数,`SELECT MAX(column) FROM table`找出某列的最大值,或者使用`SELECT column1 || ' ' || column2 FROM table`将两列数据连接成一个字符串。...
2. **字符串函数**:涉及字符串的处理,如拼接、截取、查找、替换、转换大小写等,帮助开发者处理和操作文本数据。 3. **日期/时间函数**:处理日期和时间的函数,如获取当前日期、时间戳转换、日期加减、时间间隔...
9. 字符串处理:讲述了如何使用T-SQL对字符串进行各种操作,包括字符串函数和转换。 10. 日期和时间:详细阐述了处理日期和时间数据的函数和方法。 11. 数字处理:涉及在SQL Server中对数字数据类型的操作和函数。...