Oracle触发器问题 自动填写主键
设有A表,字段(PK,con,pro),PK为主键,三个字段都为字符型。如果想实现在Insert的时候,PK的字段值是con和pro两个字段连接字符串。该如何写这个触发器...
设有A表 ,字段( PK , con , pro ) ,PK 为主键,三个字段都为字符型。
如果想实现在 Insert 的时候 , PK的字段值是 con 和 pro 两个字段连接字符串。 该如何写这个触发器?谢谢
比如:Insert时,获得 con = 'aaa' , pro = 'bbb' , 通过触发器生成 PK = 'aaa-bbb' ,并插入数据库。 展开
如果想实现在 Insert 的时候 , PK的字段值是 con 和 pro 两个字段连接字符串。 该如何写这个触发器?谢谢
比如:Insert时,获得 con = 'aaa' , pro = 'bbb' , 通过触发器生成 PK = 'aaa-bbb' ,并插入数据库。 展开
2个回答
展开全部
反问2个问题哈
1、con 和 pro 两个字段插入的如果是非数字,相减会出错。
2、PK是主键的话,你确定触发器触发的con-pro就一定不一样吗?
你看下面你应该会明白的,希望能帮到你:
-----------------------------建表-------------------
CREATE TABLE test_tr(pk INTEGER PRIMARY KEY,
con INTEGER,
pro INTEGER
)
;
----------------------------触发器------------------
CREATE OR REPLACE TRIGGER test_insert
BEFORE INSERT ON test_tr
FOR EACH ROW
DECLARE
v_pk INTEGER;
BEGIN
:new.pk := :new.con-:new.pro;
END;
------------------------测试--------------------
INSERT INTO test_tr VALUES(2,3,2);
-----------------------结果---------------------
pk con pro
1 3 2
1、con 和 pro 两个字段插入的如果是非数字,相减会出错。
2、PK是主键的话,你确定触发器触发的con-pro就一定不一样吗?
你看下面你应该会明白的,希望能帮到你:
-----------------------------建表-------------------
CREATE TABLE test_tr(pk INTEGER PRIMARY KEY,
con INTEGER,
pro INTEGER
)
;
----------------------------触发器------------------
CREATE OR REPLACE TRIGGER test_insert
BEFORE INSERT ON test_tr
FOR EACH ROW
DECLARE
v_pk INTEGER;
BEGIN
:new.pk := :new.con-:new.pro;
END;
------------------------测试--------------------
INSERT INTO test_tr VALUES(2,3,2);
-----------------------结果---------------------
pk con pro
1 3 2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
-----------------------------建表-------------------
CREATE TABLE test_tr(pk VARCHAR2(25) PRIMARY KEY,
con VARCHAR2(25),
pro VARCHAR2(25)
);
----------------------------触发器------------------
CREATE OR REPLACE TRIGGER test_insert
BEFORE INSERT ON test_tr
FOR EACH ROW
DECLARE
BEGIN
:new.pk := :new.con||'-'||:new.pro;
END test_insert;
------------------------测试--------------------
INSERT INTO test_tr(con,pro) VALUES('hello','kitty');
commit;
-----------------------结果---------------------
select * from test_tr;
hello-kitty,hello,kitty
-----
有一个问题,就是为什么要用触发器?
直接insert不行吗?
CREATE TABLE test_tr(pk VARCHAR2(25) PRIMARY KEY,
con VARCHAR2(25),
pro VARCHAR2(25)
);
----------------------------触发器------------------
CREATE OR REPLACE TRIGGER test_insert
BEFORE INSERT ON test_tr
FOR EACH ROW
DECLARE
BEGIN
:new.pk := :new.con||'-'||:new.pro;
END test_insert;
------------------------测试--------------------
INSERT INTO test_tr(con,pro) VALUES('hello','kitty');
commit;
-----------------------结果---------------------
select * from test_tr;
hello-kitty,hello,kitty
-----
有一个问题,就是为什么要用触发器?
直接insert不行吗?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询