oracle中连接表的自动填充

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) );

我的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_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很难从头开始,但有办法。请问一个新问题。