表 emp
last_name
employee_id
hire_date
department_id表 dept
department_id
salary
job_id请教如何创建存储过程在表dept扩张一字段(name(varchar2(20)),利用游标将表emp last_name字段数据更新到新加的字段name中。
last_name
employee_id
hire_date
department_id表 dept
department_id
salary
job_id请教如何创建存储过程在表dept扩张一字段(name(varchar2(20)),利用游标将表emp last_name字段数据更新到新加的字段name中。
你能保证一个department_id,在emp里只有一个last_name?
若有多个last_name,问你怎么存储,以,隔开,还是怎么处理。
假设是一一对应的话,
alter table dept add name varchar2(20);
update dept a set name=
(select last_name from emp where department_id=a.department_id);
如果dept与emp 1:1关系,拆表毫无意义。
而更新也不必存储过程,直接SQL搞掂。
确实有点怪可能是job_id连到某个别得表,然后那个表得dep_id跟这个连可能不是楼主说的一一对应。
create table T_USER
(
userID int,
userName varchar(48),
orgID int
)
go
create table T_USER_ROLE
(
userID int,
roleID int
)
--写一个存储过程,将表T_USER_ROLE扩展一个字段userName类型为varchar(48),然后用游标将T_USER的userName字段中的数据更新到T_USER_ROLE的userName字段中。
噢,这个合理,呵呵,用狂浪那两句就够了,用不着游标。
非要存储过程加游标得话,参考下:
create or replace procedure addColSyncName
as
v_cur sys_refcursor;
v_rec T_USER%ROWTYPE;
begin
begin
execute immediate 'alter table T_USER_ROLE add userName varchar2(48)';
commit;
exception when others then --已有对应列名,不管
null;
end;
open v_cur for select * from T_USER;
loop
fetch v_cur into v_rec;
exit when v_cur%NOTFOUND;
begin
execute immediate 'update T_USER_ROLE set userName = '''||v_rec.userName||''' where userId = '||v_rec.userId;
exception when NO_DATA_FOUND then --无对应userID,不管
null;
end;
end loop;
close v_cur;
commit;
end;
/