普通的update
都是根據條件來對部分列的內容進行修改,用法如下:
update temp_cwh_table set name = '***'
where id = 1;
假設現在有2張表:a、b,需要關聯a、b表,根據相同的id
來update
a表。
-- 建立測試表 temp_cwh_001
create table temp_cwh_001
( id int,
name varchar2(20)
);-- 插入資料
insert into temp_cwh_001 values (1,'aa');
insert into temp_cwh_001 values (2,'bb');
insert into temp_cwh_001 values (3,'cc');
-- 查詢
select * from temp_cwh_001
-- 1 1 aa
-- 2 2 bb
-- 3 3 cc
-- 建立測試表 temp_cwh_002
create table temp_cwh_002
( id int,
name varchar2(20)
);-- 插入資料
insert into temp_cwh_002 values (1,'cccc');
insert into temp_cwh_002 values (2,'dddd');
-- 查詢
select * from temp_cwh_002
-- 1 1 cccc
-- 2 2 dddd
-- 關聯更新
update temp_cwh_001 a
set name = (select b.name from temp_cwh_002 b where a.id = b.id);
-- 提交
commit;
-- 查詢
select * from temp_cwh_001;
-- 1 1 cccc
-- 2 2 dddd
-- 3 3
本意只是將關聯得上的內容進行update,關聯不上的內容不修改。但此用法下,關聯不上的內容直接被update為null,需再度優化。
-- 關聯更新
update temp_cwh_001 a
set name = (select b.name from temp_cwh_002 b where a.id = b.id)
where id = (select b.id from temp_cwh_002 b where a.id = b.id)
-- 提交
commit;
-- 查詢
select * from temp_cwh_001;
-- 1 1 cccc
-- 2 2 dddd
-- 3 3 cc
新增where條件過濾,符合條件。
-- 關聯更新
update temp_cwh_001 a
set name = (select b.name from temp_cwh_002 b where a.id = b.id)
where exists (select 1 from temp_cwh_002 b where a.id = b.id)
-- 提交
commit;
-- 查詢
select * from temp_cwh_001;
-- 1 1 cccc
-- 2 2 dddd
-- 3 3 cc
update (select a.name aname,
a.id aid,
b.name bname,
b.id bid
from temp_cwh_001 a,
temp_cwh_002 b
where a.id = b.id)
set aname = bname
報錯:ora-01779: cannot modify a column which maps to a non key-preserved table
需要主鍵的支援
alter table temp_cwh_001 add primary key(id);
alter table temp_cwh_002 add primary key(id);
重新執行,便可。
這種方法的侷限性就是需要primary的支援。
可以使用儲存過程的方式進行靈活處理,不過這裡有點複雜。。暫且記錄。。
declare
cursor cur_wm is select name, id from temp_cwh_002;
begin
for my_wm in cur_wm loop
update temp_cwh_001 set name = my_wm.name
where id = my_wm.id;
end loop;
end;
執行之後,pl/sql procedure successfully completed. oracle 學習筆記
本地網路服務名配置 在客戶機的 oracle oracle90 network admin 安裝目錄下有乙個名為tnsnames.ora的命名檔案,其中儲存的就是本地命名的配置.當客戶機應用程式提出登入要求時,其使用的連線字串被命名檔案解析.在命名檔案裡儲存的是與連線字串對應的網路位址.例如 mys...
Oracle學習筆記
許可權管理 oracle 9i 3個預設使用者 sys 超級管理員 預設密碼 change on install system 普通管理員 預設密碼 manager scott 普通使用者 預設密碼 tiger oracle 10g sys 密碼在安裝時設定 system 密碼在安裝時設定 scot...
oracle學習筆記
1 set linesize 100 設定長度 2 set pagesize 30 設定每頁顯示數目 3 em a.sql 開啟記事本 4 a 執行檔案a中的 可指定檔案的路徑 d a.txt 5 conn 使用者名稱 密碼 根據使用者名稱和密碼連線資料庫 如果連線超級管理員 sys 則應加上as ...