1.TABLE1 的触发器中的校验 CREATE TABLE1(
Id char(20) NOT NULL,
商品id char(10) NULL,
商品组ID char(10) NULL,
.............
lock_dt datetime NOT NULL
)
go
/*
我想表达,在插入时候, 商品ID和商品组ID同时不为空的时候做检查
商品必须是属于这个商品组的.要满足这个关系,我下面的写法对不
*/
if
update(商品id ) or
update(商品组ID)
begin
select @nullcnt = 0
select @validcnt = count(*)
from inserted, 商品组关系表 //在商品关系表中查,该商品是不是这个商品组的ID
where
inserted.商品id = 商品组关系表.商品id and
inserted.商品组ID= 商品组关系表.商品组ID
select @nullcnt = count(*) from inserted where//都不为空
inserted.商品id not null and
inserted.商品组ID is not null
if @validcnt + @nullcnt != @numrows
begin
select @errno = 80002,
@errmsg = '不能插入因为商品和所属商品关系组不匹配'
goto error
end
end2 功能表ID字段定义,我想MY_FUNC 表的id字段定义为自增的 IDENTITY,
可我另外一个表 AUDIT_MY_FUNC(MY_FUNC变更时记录变更信息的表) 也有一个自增字段id,
我可以同时在AUDIT_MY_FUNC有两个IDENTITY吗.
CREATE TABLE MY_FUNC (
sp_fun_id numeric(12,0) IDENTITY,// 这样可以吗?
sp_name char(200) NOT NULL,
trade_type_ind char(1) NOT NULL,
rule_name char(25) NULL,
rule_description char(200) NULL,
status char(1) NOT NULL,
lock_dt datetime NOT NULL
)
go
CREATE TABLE AUDIT_MY_FUNC (//记录
id numeric(12,0) IDENTITY,// 这样可以吗?
modify_dt datetime NOT NULL,
audit_type_ind char(1) NOT NULL,
user_name varchar(30)NOT NULL,
sp_fun_id numeric(12,0) IDENTITY, // 这样可以吗?
status char(1) NOT NULL,
lock_dt datetime NOT NULL
)
LOCK DATAROWS
go3 如何写存储过程从MY_FUNC 返回一个结果集CREATE TABLE MY_FUNC (
sp_fun_id numeric(12,0) IDENTITY,// funtion 功能ID
sp_name char(200) NOT NULL, //function对应的 存储过程名字
trade_type_ind char(1) NOT NULL, //交易类型 A B C
rule_name char(25) NULL,
rule_description char(200) NULL,
status char(1) NOT NULL, //ACITVE/INACTIVE.
lock_dt datetime NOT NULL
)
我想有一个存储过程 sp_get_funs返回指定交易类型A的全部功能.4 检验交易的规则存储过程 sp_check_with_funs 和 sp_check_a 怎么写 CREATE TABLE 交易记录表(
hdr_num int NOT NULL, 交易记录号
trade_type_ind char(1) NOT NULL, 交易类型 A B C
xml_text text NOT NULL, 交易类容
lock_dt datetime NOT NULL
)
go /记录某一种商品交易的规则, 根据交易的商品或者商品的组,产地,类型来执行不同的格式合同/
CREATE 交易规则表 (
ID char(20) NOT NULL,
商品ID char(10) NULL,
商品组ID char(10) NULL,
商品产地ID char(10) NULL,
trade_type_ind char(1) NOT NULL, 交易类型 A B C
运送方式 char(1) NULL,
格式合同条款ID char(10) NOT NULL,
lock_dt datetime NOT NULL
)
我从第三步得到了要做的function列表,function_recordset.
遍历其中的每一个function,然后调用指定sp_name (如 funcation_a, sp_check_a),
我想让sp_check_a去交易记录表中读取一条交易记录, 然后去交易规则表中找对该条记录进行
分析匹配,找到一条适合的规则(找到第一个适合的就可以跳出匹配规则,不再匹配了),并返回这个规则(格式合同条款ID)这块应该怎么写啊.
Id char(20) NOT NULL,
商品id char(10) NULL,
商品组ID char(10) NULL,
.............
lock_dt datetime NOT NULL
)
go
/*
我想表达,在插入时候, 商品ID和商品组ID同时不为空的时候做检查
商品必须是属于这个商品组的.要满足这个关系,我下面的写法对不
*/
if
update(商品id ) or
update(商品组ID)
begin
select @nullcnt = 0
select @validcnt = count(*)
from inserted, 商品组关系表 //在商品关系表中查,该商品是不是这个商品组的ID
where
inserted.商品id = 商品组关系表.商品id and
inserted.商品组ID= 商品组关系表.商品组ID
select @nullcnt = count(*) from inserted where//都不为空
inserted.商品id not null and
inserted.商品组ID is not null
if @validcnt + @nullcnt != @numrows
begin
select @errno = 80002,
@errmsg = '不能插入因为商品和所属商品关系组不匹配'
goto error
end
end2 功能表ID字段定义,我想MY_FUNC 表的id字段定义为自增的 IDENTITY,
可我另外一个表 AUDIT_MY_FUNC(MY_FUNC变更时记录变更信息的表) 也有一个自增字段id,
我可以同时在AUDIT_MY_FUNC有两个IDENTITY吗.
CREATE TABLE MY_FUNC (
sp_fun_id numeric(12,0) IDENTITY,// 这样可以吗?
sp_name char(200) NOT NULL,
trade_type_ind char(1) NOT NULL,
rule_name char(25) NULL,
rule_description char(200) NULL,
status char(1) NOT NULL,
lock_dt datetime NOT NULL
)
go
CREATE TABLE AUDIT_MY_FUNC (//记录
id numeric(12,0) IDENTITY,// 这样可以吗?
modify_dt datetime NOT NULL,
audit_type_ind char(1) NOT NULL,
user_name varchar(30)NOT NULL,
sp_fun_id numeric(12,0) IDENTITY, // 这样可以吗?
status char(1) NOT NULL,
lock_dt datetime NOT NULL
)
LOCK DATAROWS
go3 如何写存储过程从MY_FUNC 返回一个结果集CREATE TABLE MY_FUNC (
sp_fun_id numeric(12,0) IDENTITY,// funtion 功能ID
sp_name char(200) NOT NULL, //function对应的 存储过程名字
trade_type_ind char(1) NOT NULL, //交易类型 A B C
rule_name char(25) NULL,
rule_description char(200) NULL,
status char(1) NOT NULL, //ACITVE/INACTIVE.
lock_dt datetime NOT NULL
)
我想有一个存储过程 sp_get_funs返回指定交易类型A的全部功能.4 检验交易的规则存储过程 sp_check_with_funs 和 sp_check_a 怎么写 CREATE TABLE 交易记录表(
hdr_num int NOT NULL, 交易记录号
trade_type_ind char(1) NOT NULL, 交易类型 A B C
xml_text text NOT NULL, 交易类容
lock_dt datetime NOT NULL
)
go /记录某一种商品交易的规则, 根据交易的商品或者商品的组,产地,类型来执行不同的格式合同/
CREATE 交易规则表 (
ID char(20) NOT NULL,
商品ID char(10) NULL,
商品组ID char(10) NULL,
商品产地ID char(10) NULL,
trade_type_ind char(1) NOT NULL, 交易类型 A B C
运送方式 char(1) NULL,
格式合同条款ID char(10) NOT NULL,
lock_dt datetime NOT NULL
)
我从第三步得到了要做的function列表,function_recordset.
遍历其中的每一个function,然后调用指定sp_name (如 funcation_a, sp_check_a),
我想让sp_check_a去交易记录表中读取一条交易记录, 然后去交易规则表中找对该条记录进行
分析匹配,找到一条适合的规则(找到第一个适合的就可以跳出匹配规则,不再匹配了),并返回这个规则(格式合同条款ID)这块应该怎么写啊.
-- 这里是 Oracle 版论坛,你这是 SQL Server的语法!
-- 别发错论坛啦..........
RULE_ID char(20) NOT NULL,
CARGO_ID char(10) NULL,
CARGO_GROUP_ID char(10) NULL,
CARGO_LOCATION_ID char(10) NULL,
trade_type_ind char(1) NOT NULL, //交易类型 A B C
TERMS_ID char(10) NOT NULL, //合同条款
lock_dt datetime NOT NULL ) CREATE CARGOGROUPRELATIONSHIP(
CARGOGROUP_R_ID char(20) NOT NULL,
CARGO_ID char(10) NULL,
CARGO_GROUP_ID char(10) NULL,
lock_dt datetime NOT NULL )
e.g.
INSERT INTO TRADE_RULE VALUES ('rule_coal','coal_cd','coal_group_cd','山西','A','TERM_B',getdate());
INSERT INTO TRADE_RULE VALUES ('rule_Jet','jet_cd','jet_group_cd','陕西','A','TERM_C',getdate());
INSERT INTO TRADE_RULE VALUES ('rule_bean','bean_cd','bean_group_cd','吉林','B','TERM_A',getdate());
INSERT INTO TRADE_RULE VALUES ('rule_bean','bean_cd','coal_group_cd','四川','B','TERM_A',getdate()); //组选错了,不能存.
INSERT INTO TRADE_RULE VALUES ('1','coal_cd','coal_group_cd',getdate())
INSERT INTO TRADE_RULE VALUES ('2','jet_cd','jet_group_cd',getdate())
INSERT INTO TRADE_RULE VALUES ('3','bean_cd','bean_group_cd',getdate())/*
我想表达,在插入时候, 商品ID(CARGO_ID)和商品组ID(CARGO_GROUP_ID)同时不为空的时候做检查
商品必须是属于这个商品组的.要满足这个关系,我下面的写法对不
*/
if
update(商品id ) or
update(商品组ID)
begin
select @nullcnt = 0
select @validcnt = count(*)
from inserted, CARGOGROUPRELATIONSHIP //在商品关系表中查,该商品是不是这个商品组的ID
where
inserted.CARGO_ID = CARGOGROUPRELATIONSHIP.CARGO_ID and
inserted.CARGO_GROUP_ID= CARGOGROUPRELATIONSHIP.CARGO_GROUP_ID
select @nullcnt = count(*) from inserted where//都不为空
inserted.CARGO_ID not null and
inserted.CARGO_GROUP_ID is not null
if @validcnt + @nullcnt != @numrows
begin
select @errno = 80002,
@errmsg = '不能插入因为商品和所属商品关系组不匹配'
goto error
end
end //当都正确了, 我向AUDIT_TRADE_RULE增加一条记录,谁,在什么时候,修改了TRADE_RULE的记录.
INSERT INTO AUDIT_TRADE_RULE(getdate(),username(),'insert',.....)
2 功能表ID字段定义,我想MY_FUNC 表的id字段定义为自增的 IDENTITY,
可我另外一个表 AUDIT_MY_FUNC(MY_FUNC变更时记录变更信息的表) 也有一个自增字段id,
我可以同时在AUDIT_MY_FUNC有两个IDENTITY吗.
CREATE TABLE MY_FUNC (
sp_fun_id numeric(12,0) IDENTITY,// 这样可以吗?
sp_name char(200) NOT NULL,
trade_type_ind char(1) NOT NULL,
rule_name char(25) NULL,
rule_description char(200) NULL,
status char(1) NOT NULL,
lock_dt datetime NOT NULL
)
go
insert into MY_FUNC VALUES('sp_check_a','A','check_a','检查A类型交易应该执行的合同条款','A',getdate())
insert into MY_FUNC VALUES('sp_check_a1','A','default_a1','检查A类型交易的默认字段值是否正确','A',getdate())
3 如何写存储过程从MY_FUNC 返回一个结果集CREATE TABLE MY_FUNC (
sp_fun_id numeric(12,0) IDENTITY,// funtion 功能ID
sp_name char(200) NOT NULL, //function对应的 存储过程名字
trade_type_ind char(1) NOT NULL, //交易类型 A B C
rule_name char(25) NULL,
rule_description char(200) NULL,
status char(1) NOT NULL, //ACITVE/INACTIVE.
lock_dt datetime NOT NULL
) 我想有一个存储过程 sp_get_funs返回指定交易类型A的全部功能.
//得到
---------------
sp_check_a
sp_check_a1
create proc sp_get_funs
@Type char(1)
AS
select * from MY_FUNC where trade_type_ind=@Type
go
4 检验交易的规则存储过程 sp_check_with_funs 和 sp_check_a 怎么写 CREATE TABLE TRADEINFO(
hdr_num int NOT NULL, 交易记录号
trade_type_ind char(1) NOT NULL, 交易类型 A B C
xml_text text NOT NULL, 交易类容
lock_dt datetime NOT NULL
)
goinsert into TRADEINFO VALUES(1001,'A','<trade id="1001"><hdr_num>1001</hdr_num><trade_type_ind>A</trade_type_ind><CARGO_ID>coal_cd</CARGO_ID><CARGO_GROUP_ID>coal_group_cd</CARGO_GROUP_ID><CARGO_LOCATION_ID>山西</CARGO_LOCATION_ID></trade>',getdate())
我从第三步得到了要做的function列表,function_recordset.
遍历其中的每一个function,然后调用指定sp_name (如 funcation_a, sp_check_a),
我想让sp_check_a去交易记录表中TRADEINFO读取一条交易记录, 然后去交易规则表TRADE_RULE中找对该条记录进行
分析匹配,找到一条适合的规则(找到第一个适合的就可以跳出匹配规则,不再匹配了),并返回这个规则(格式合同条款ID)这块应该怎么写啊. -------------------->>>>>>>
sp_check_with_funs
(1) call sp_get_funs 'A' //
(2) //得到
sp_check_a
sp_check_a1
(3) 遍历得到结果集 分别调用得到的结果,
3.1 sp_check_a
3.1.1 从 TRADEINFO 读记录,得到1001,xml表格式的. 不熟悉解析xml表解析就当一个字段先取了,然后设固定变量往下做吧,
我知道sybase中xmltract,别的数据库不知道呢。3.1.2 TRADE_RULE 分析匹配得到TERM_B ,可能是下面这么写的.
(1)不过我传近来的交易记录不一定同时都有CARGO_ID和CARGO_GROUP_ID,大多数情况,只有里面的一个.
(2)我也不确定到底哪个TRADE_RULE是符合的,需要遍历一边这个表中交易类型是一样的所有规则,知道找到第一个合适的select TERMS_ID from TRADE_RULE where CARGO_ID='coal_cd' and CARGO_GROUP_ID='coal_group_cd'
and CARGO_LOCATION_ID='山西' and trade_type_ind ='A' 3.2 sp_check_a1
//这个只管去调用了,参数格式 数目和sp_check_a都一样的,暂时先不管它里面执行代码了.
就算不一样,要是在oracle实现了,我参考下在别的数据库中实现哈.