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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章