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
    image
  • t2
    image

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


image

posted @ 2023-07-18 10:41  丹心石  阅读(18)  评论(0编辑  收藏  举报