oracle中连接表的自动填充
我的Oracle数据库11g中有3个表:oracle中连接表的自动填充,oracle,plsql,Oracle,Plsql,我的Oracle数据库11g中有3个表: CREATE TABLE Customer ( cust_id NUMBER PRIMARY KEY, cust_name VARCHAR2(100), cust_phone VARCHAR2(20) ); CREATE TABLE Address ( address_id NUMBER PRIMARY KEY, address VARCHAR2(500), area VARCHAR2(100) );
CREATE TABLE Customer (
cust_id NUMBER PRIMARY KEY,
cust_name VARCHAR2(100),
cust_phone VARCHAR2(20)
);
CREATE TABLE Address (
address_id NUMBER PRIMARY KEY,
address VARCHAR2(500),
area VARCHAR2(100)
);
CREATE TABLE Customer_Address (
cust_id NUMBER REFERENCES Customer ( cust_id ),
Address_id NUMBER REFERENCES Address ( address_id ),
PRIMARY KEY ( cust_id, address_id )
);
现在,我想自动将id输入到Customer_Address表中,并使用电话号码进行检查。如果Customer表中存在电话号码,请使用相应的id,否则请创建一个新id
我尝试过创建一个视图,在该视图中插入客户和地址表的ID,然后使用而不是插入触发器来填充连接表,但它不起作用
这可以使用序列和触发器来完成?还是其他方式?如果要在数据库中实现业务逻辑(确实应该这样做),请帮助我,正确的方法是使用存储过程而不是触发器
create or replace procedure insert_address
( p_phone_number in customer.cust_phone%type
, p_address in address.address%type
, p_area in address.area%type )
is
l_cust_id customer.cust_id%type;
l_addr_id address.address_id%type;
begin
begin
select c.cust_id
into l_cust_id
from customer c
where c.cust_phone = p_cust_phone;
exception
when no_data_found then
insert into customer
values (customer_id_seq.nextval, 'No name', p_cust_phone)
returning cust_id into l_cust_id;
end;
insert into address
values (address_id_seq.nextval, p_address, p_area)
returning address_id into l_addr_id;
insert into customer_address
values (l_cust_id, l_addr_id);
end;
异常处理和其他细节留给读者作为练习
老实说,这是一个人工操作:IRL在收集地址之前,客户记录应该存在。在该场景中,新的客户记录不包括客户名称——这是一个相当重要的属性。即使在这个移动电话时代,电话号码也不太可能作为客户的UID。事实上,客户可能有不止一个电话号码。这确实是一种人为的做法。客户记录中添加了电话号码。如果电话号码不存在,则只会添加新客户,否则将使用电话号码对应的id获取地址。我一定会扩展我的模型,包括不止一个电话号码。非常感谢您的回答。这真的会帮助我学习。我还想问的另一件事是,我能把excel文件中的参数输入到这个过程中吗?如果有办法的话,那就太好了。Excel很难从头开始,但有办法。请问一个新问题。