Oralce-PLSQ 基本操作
1.复制表
- 通过
create table tbName as select * from otherTbName
复制表
注意事项
- 只复制数据,不复制约束: 通过该命令赋值的表,在源表中的约束、默认值、触发器和存储过程等对象,在复制后的目标中会丢失。
- 在执行赋值命令时,会自动提交未提交源数据表中未提交的数据
create table t1(id integer,name varchar2(30)); --创建表
insert into t1(id,name) values(1001,'test1'); -- 插入数据
create table t2 as select * from t1; --复制表
insert into t2(id,name) values(1002,'test2'); --t2 插入数据
rollback; --回滚(此时t1 中的插入命令是不会回滚的)
- 结果
t1和t2 两个表中都保存一条数据,即 1001 test1
2.insert all
同时向多个表中插入相同的数据
--无条件
insert all
into t1(id,name) values(eid,ename)
into t2(name) values(ename)
select 1003 eid,'test3' ename from dual; --前面的实参要和这里的别名对应
--有条件
insert all
when dept in ('研发部','市场部') then
into t1(id,name) values(eid,ename)
when job in('经理','主管') then
into t2(id,name) values(eid,ename)
select id eid,name ename from tbName
3.行列转换
create table t2(d varchar2(10),des varchar2(50));--创建表
create table t1 as --复制表(示例数据)
select '熊样,精神不佳' d1,
'猫样,温顺听话' d2,
'狗样,神奇活现' d3,
'鸟样,向往明天' d4,
'花样,愿你快乐像花儿一样' d5
from dual;
insert all --行列转换
into t2(d,des) values('周一',d1)
into t2(d,des) values('周二',d2)
into t2(d,des) values('周三',d3)
into t2(d,des) values('周四',d4)
into t2(d,des) values('周五',d5)
select d1,d2,d3,d4,d5 from t1;
- t1
- t2
4.用其他表更新值
alter table emp add dname varchar2(50); --修改员工表,增加荣誉字段部门名称
--方法一
update emp set --修改员工表部门名称
emp.dname=
(select dept.dname from dept
where dept.deptno=emp.deptno)
--方法二
using(
select emp.dname,dept.dname new_dname
from emp inner join dept on emp.deptno=dept.deptno
)
set dname=new_dname
--可能会报 无法修改与非键值保存表对应的列,这时在表dept中增加唯一索引或主键,在执行即可。
--方法三
merge into emp
using(select dname,deptno from dept) dept on(dept.deptno=emp.deptno)
when matched then
update set emp.dname=dept.dname; --这里的update 后面无需表名,直接写 set