产品是用友NC财务软件,数据库是oracle。
产品端地区分类,我们已经按照全国的地级市增加地区分类,然后需要在每个地级市增加有规律的12个分类,分包是:
1 哈尔滨地材类供应商名录
2 哈尔滨块材类供应商名录
3 哈尔滨水泥类供应商名录
4 哈尔滨木材类供应商名录
5 哈尔滨金属类供应商名录
6 哈尔滨高分子材料类供应商名录
7 哈尔滨电工材料类供应商名录
8 哈尔滨安全防护用品器材类供应商名录
9 哈尔滨其他材料类供应商名录
10 哈尔滨器材租赁供应商名录
11 哈尔滨专业分包供应商名录
12 哈尔滨税款、投标类他项名录
现在我们每次都要手工增加每个城市的12个分类,很麻烦。6.10号更新:
昨天和今天在我矿大计算机专业的同学们这里,问了几个人,初步有两个想法
1,写触发器。
在增加地级市第一类材料的时候,触发器里面写insert,一共写11个,名称分两部分,第一部分的地级市名字可以通过:new的name和substr搞定,然后后面的收工录入,比如增加“ 哈尔滨地材类供应商名录”保存之后,触发器自动完成
2 哈尔滨块材类供应商名录
3 哈尔滨水泥类供应商名录
4 哈尔滨木材类供应商名录 等等。
通过触发器有一个好处,这样写材料类别的pk字段容易写,因为每个pk字段都必须是唯一的,我增加11个类的时候可以依次加1,另外就是pk_father那个字段可以指定,就是:new的father。
但是有一个缺陷就是必须每次要增加一个。有人说第二个写法.
2,存储过程。
存储过程的时候要用到地级市作为变量,这个我可以通过sql查询出来,因为地级市对应的pk_father那个字段为空,可是生下来怎么写,真的不知道。昨天折腾了一天,通过触发器写出来了,效果还可以,缺点有几个:
1,必须先手工录入地区城市下的第一个材料商类别,以此作为:new给下面11个材料商类别使用;
2,剩余的11个材料商类别在触发器里面一个个录入insert,所有触发器特别的长;
3,材料商对应后台表的一个字段pk_areacl没有系统自动产生的那样美观,系统是长度20位,前几位都是0001X1开始,然后自动产生,最末级是英文字母依次排列,不够的时候变成数字。请问,这11个类别可否作为变量或者数组先写好,然后02-11个类别也作为变量,这样可否把触发器优化写的简洁些?create or replace trigger ADDAREA
before insert on bd_areacl
for each row
declare
-- local variables here
vname char(10);
begin
select areaclname into vname from bd_areacl where pk_areacl=:new.pk_fatherarea;
if length(:new.areaclcode)='8' and substr(:new.areaclcode,-2,2)='01'
then
insert into bd_areacl
(
areaclcode,
areaclname,
def1,
def2,
def3,
def4,
def5,
dr,
mnecode,
pk_areacl,
pk_corp,
pk_fatherarea,
ts
)
values
(
substr(:new.areaclcode,0,6)||'02',
trim(replace(vname,'市',''))||'块材类供应商名录' ,
:new.def1,
:new.def2,
:new.def3,
:new.def4,
:new.def5,
:new.dr,
:new.mnecode,
'02'||substr(:new.pk_areacl,-18,18),
:new.pk_corp,
:new.pk_fatherarea,
:new.ts
);
end if;
end ADDAREA;
这里的触发器我没有写完,下面还有10个insert,都是类似的写法,每个insert只是在
substr(:new.areaclcode,0,6)||'02',
trim(replace(vname,'市',''))||'块材类供应商名录' ,
'02'||substr(:new.pk_areacl,-18,18),
这三个地方有区别。
请高手指导,这里我可否把12个类别作为变量,然后把12个客商类别作为数组(变量),简化触发器的长度?
产品端地区分类,我们已经按照全国的地级市增加地区分类,然后需要在每个地级市增加有规律的12个分类,分包是:
1 哈尔滨地材类供应商名录
2 哈尔滨块材类供应商名录
3 哈尔滨水泥类供应商名录
4 哈尔滨木材类供应商名录
5 哈尔滨金属类供应商名录
6 哈尔滨高分子材料类供应商名录
7 哈尔滨电工材料类供应商名录
8 哈尔滨安全防护用品器材类供应商名录
9 哈尔滨其他材料类供应商名录
10 哈尔滨器材租赁供应商名录
11 哈尔滨专业分包供应商名录
12 哈尔滨税款、投标类他项名录
现在我们每次都要手工增加每个城市的12个分类,很麻烦。6.10号更新:
昨天和今天在我矿大计算机专业的同学们这里,问了几个人,初步有两个想法
1,写触发器。
在增加地级市第一类材料的时候,触发器里面写insert,一共写11个,名称分两部分,第一部分的地级市名字可以通过:new的name和substr搞定,然后后面的收工录入,比如增加“ 哈尔滨地材类供应商名录”保存之后,触发器自动完成
2 哈尔滨块材类供应商名录
3 哈尔滨水泥类供应商名录
4 哈尔滨木材类供应商名录 等等。
通过触发器有一个好处,这样写材料类别的pk字段容易写,因为每个pk字段都必须是唯一的,我增加11个类的时候可以依次加1,另外就是pk_father那个字段可以指定,就是:new的father。
但是有一个缺陷就是必须每次要增加一个。有人说第二个写法.
2,存储过程。
存储过程的时候要用到地级市作为变量,这个我可以通过sql查询出来,因为地级市对应的pk_father那个字段为空,可是生下来怎么写,真的不知道。昨天折腾了一天,通过触发器写出来了,效果还可以,缺点有几个:
1,必须先手工录入地区城市下的第一个材料商类别,以此作为:new给下面11个材料商类别使用;
2,剩余的11个材料商类别在触发器里面一个个录入insert,所有触发器特别的长;
3,材料商对应后台表的一个字段pk_areacl没有系统自动产生的那样美观,系统是长度20位,前几位都是0001X1开始,然后自动产生,最末级是英文字母依次排列,不够的时候变成数字。请问,这11个类别可否作为变量或者数组先写好,然后02-11个类别也作为变量,这样可否把触发器优化写的简洁些?create or replace trigger ADDAREA
before insert on bd_areacl
for each row
declare
-- local variables here
vname char(10);
begin
select areaclname into vname from bd_areacl where pk_areacl=:new.pk_fatherarea;
if length(:new.areaclcode)='8' and substr(:new.areaclcode,-2,2)='01'
then
insert into bd_areacl
(
areaclcode,
areaclname,
def1,
def2,
def3,
def4,
def5,
dr,
mnecode,
pk_areacl,
pk_corp,
pk_fatherarea,
ts
)
values
(
substr(:new.areaclcode,0,6)||'02',
trim(replace(vname,'市',''))||'块材类供应商名录' ,
:new.def1,
:new.def2,
:new.def3,
:new.def4,
:new.def5,
:new.dr,
:new.mnecode,
'02'||substr(:new.pk_areacl,-18,18),
:new.pk_corp,
:new.pk_fatherarea,
:new.ts
);
end if;
end ADDAREA;
这里的触发器我没有写完,下面还有10个insert,都是类似的写法,每个insert只是在
substr(:new.areaclcode,0,6)||'02',
trim(replace(vname,'市',''))||'块材类供应商名录' ,
'02'||substr(:new.pk_areacl,-18,18),
这三个地方有区别。
请高手指导,这里我可否把12个类别作为变量,然后把12个客商类别作为数组(变量),简化触发器的长度?
create or replace trigger ADDAREA
before insert on bd_areacl
for each row
declare
-- local variables here
vname char(10);
begin
select areaclname into vname from bd_areacl where pk_areacl=:new.pk_fatherarea;
if length(:new.areaclcode)='8' and substr(:new.areaclcode,-2,2)='01'
then
insert into bd_areacl
(
areaclcode,
areaclname,
def1,
def2,
def3,
def4,
def5,
dr,
mnecode,
pk_areacl,
pk_corp,
pk_fatherarea,
ts
)
values
(
substr(:new.areaclcode,0,6)||'02',
trim(replace(vname,'市',''))||'块材类供应商名录' ,
:new.def1,
:new.def2,
:new.def3,
:new.def4,
:new.def5,
:new.dr,
:new.mnecode,
'02'||substr(:new.pk_areacl,-18,18),
:new.pk_corp,
:new.pk_fatherarea,
:new.ts
);
insert into bd_areacl
(
areaclcode,
areaclname,
def1,
def2,
def3,
def4,
def5,
dr,
mnecode,
pk_areacl,
pk_corp,
pk_fatherarea,
ts
)
values
(
substr(:new.areaclcode,0,6)||'03',
trim(replace(vname,'市',''))||'水泥类供应商名录' ,
:new.def1,
:new.def2,
:new.def3,
:new.def4,
:new.def5,
:new.dr,
:new.mnecode,
'03'||substr(:new.pk_areacl,-18,18),
:new.pk_corp,
:new.pk_fatherarea,
:new.ts
);
insert into bd_areacl
(
areaclcode,
areaclname,
def1,
def2,
def3,
def4,
def5,
dr,
mnecode,
pk_areacl,
pk_corp,
pk_fatherarea,
ts
)
values
(
substr(:new.areaclcode,0,6)||'04',
trim(replace(vname,'市',''))||'木材类供应商名录' ,
:new.def1,
:new.def2,
:new.def3,
:new.def4,
:new.def5,
:new.dr,
:new.mnecode,
'04'||substr(:new.pk_areacl,-18,18),
:new.pk_corp,
:new.pk_fatherarea,
:new.ts
);
insert into bd_areacl
(
areaclcode,
areaclname,
def1,
def2,
def3,
def4,
def5,
dr,
mnecode,
pk_areacl,
pk_corp,
pk_fatherarea,
ts
)
values
(
substr(:new.areaclcode,0,6)||'05',
trim(replace(vname,'市',''))||'金属类供应商名录' ,
:new.def1,
:new.def2,
:new.def3,
:new.def4,
:new.def5,
:new.dr,
:new.mnecode,
'05'||substr(:new.pk_areacl,-18,18),
:new.pk_corp,
:new.pk_fatherarea,
:new.ts
);
insert into bd_areacl
(
areaclcode,
areaclname,
def1,
def2,
def3,
def4,
def5,
dr,
mnecode,
pk_areacl,
pk_corp,
pk_fatherarea,
ts
)
values
(
substr(:new.areaclcode,0,6)||'06',
trim(replace(vname,'市',''))||'高分子材料类供应商名录' ,
:new.def1,
:new.def2,
:new.def3,
:new.def4,
:new.def5,
:new.dr,
:new.mnecode,
'06'||substr(:new.pk_areacl,-18,18),
:new.pk_corp,
:new.pk_fatherarea,
:new.ts
);
insert into bd_areacl
(
areaclcode,
areaclname,
def1,
def2,
def3,
def4,
def5,
dr,
mnecode,
pk_areacl,
pk_corp,
pk_fatherarea,
ts
)
values
(
substr(:new.areaclcode,0,6)||'07',
trim(replace(vname,'市',''))||'电工材料类供应商名录' ,
:new.def1,
:new.def2,
:new.def3,
:new.def4,
:new.def5,
:new.dr,
:new.mnecode,
'07'||substr(:new.pk_areacl,-18,18),
:new.pk_corp,
:new.pk_fatherarea,
:new.ts
);
insert into bd_areacl
(
areaclcode,
areaclname,
def1,
def2,
def3,
def4,
def5,
dr,
mnecode,
pk_areacl,
pk_corp,
pk_fatherarea,
ts
)
values
(
substr(:new.areaclcode,0,6)||'08',
trim(replace(vname,'市',''))||'安全防护用品器材类供应商名录' ,
:new.def1,
:new.def2,
:new.def3,
:new.def4,
:new.def5,
:new.dr,
:new.mnecode,
'08'||substr(:new.pk_areacl,-18,18),
:new.pk_corp,
:new.pk_fatherarea,
:new.ts
);
insert into bd_areacl
(
areaclcode,
areaclname,
def1,
def2,
def3,
def4,
def5,
dr,
mnecode,
pk_areacl,
pk_corp,
pk_fatherarea,
ts
)
values
(
substr(:new.areaclcode,0,6)||'09',
trim(replace(vname,'市',''))||'其他材料类供应商名录' ,
:new.def1,
:new.def2,
:new.def3,
:new.def4,
:new.def5,
:new.dr,
:new.mnecode,
'09'||substr(:new.pk_areacl,-18,18),
:new.pk_corp,
:new.pk_fatherarea,
:new.ts
);
insert into bd_areacl
(
areaclcode,
areaclname,
def1,
def2,
def3,
def4,
def5,
dr,
mnecode,
pk_areacl,
pk_corp,
pk_fatherarea,
ts
)
values
(
substr(:new.areaclcode,0,6)||'10',
trim(replace(vname,'市',''))||'器材租赁供应商名录' ,
:new.def1,
:new.def2,
:new.def3,
:new.def4,
:new.def5,
:new.dr,
:new.mnecode,
'10'||substr(:new.pk_areacl,-18,18),
:new.pk_corp,
:new.pk_fatherarea,
:new.ts
);
insert into bd_areacl
(
areaclcode,
areaclname,
def1,
def2,
def3,
def4,
def5,
dr,
mnecode,
pk_areacl,
pk_corp,
pk_fatherarea,
ts
)
values
(
substr(:new.areaclcode,0,6)||'11',
trim(replace(vname,'市',''))||'专业分包供应商名录' ,
:new.def1,
:new.def2,
:new.def3,
:new.def4,
:new.def5,
:new.dr,
:new.mnecode,
'11'||substr(:new.pk_areacl,-18,18),
:new.pk_corp,
:new.pk_fatherarea,
:new.ts
);
insert into bd_areacl
(
areaclcode,
areaclname,
def1,
def2,
def3,
def4,
def5,
dr,
mnecode,
pk_areacl,
pk_corp,
pk_fatherarea,
ts
)
values
(
substr(:new.areaclcode,0,6)||'12',
trim(replace(vname,'市',''))||'税款、投标类他项名录' ,
:new.def1,
:new.def2,
:new.def3,
:new.def4,
:new.def5,
:new.dr,
:new.mnecode,
'12'||substr(:new.pk_areacl,-18,18),
:new.pk_corp,
:new.pk_fatherarea,
:new.ts
);
end if;
end ADDAREA;