問題2 sql*plus copy命令
問題描述
怎樣在sql*plus中實現不同的表之間的資料複製,不論是本地的還是遠端的?
問題分析
在sql*plus中的copy命令,可以完成遠端資料庫、本地資料庫或oracle資料庫與非oracle資料庫之間的資料複製。其效能與匯入/匯出相同。
copy的基本命令格式:
username/password\]@connect_identifier
在資料複製時,複製支援的資料型別為:char、date、long、number、varchar2。原理如圖3-9所示。
圖3-9 sql*plus copy原理圖
sql*plus copy命令可在不同資料庫之間,以及同乙個資料庫內的不同模式的表之間複製資料。
•從遠端資料庫複製資料到本地資料庫。
•從本地資料庫(預設)複製資料到遠端資料庫。
•從乙個遠端資料庫複製資料到另乙個遠端資料庫。
通常,copy命令用於oracle資料庫與非oracle資料庫之間複製資料。如果在oracle資料庫之間複製資料,應該使用create table as 和insert的sql命令。
•replace子句指定了被建立的表名。如果目標表已存在,則刪除並用包含複製資料的表替代。若不存在,則建立目標表。
•使用create子句可避免覆蓋已存在的表。若目標表已存在,則copy報告乙個錯誤;若不存在,則建立目標表。
•insert插入資料到已存在的表。
將查詢到的行插入到目標表,如果目標表不存在,copy返回錯誤。當使用insert時,using子句必須為目標表的每個列選擇對應的列。
問題解答
首先應注意的是:
1)copy是sql*plus命令,不是sql命令,在語句最後不必加分號;
2)由於多數copy命令比較長,所以,在分行時每行末尾必須有續行符(-),最後一行不加。
具體步驟如下。
步驟1:使用using子句指定乙個查詢,將其查詢結果資料複製到本地資料庫的當前模式下employee表中。例如:
copy from hr/hrd@rensh-replace employee-using select last_name,salary-from emp_details_view-where department_id=30
步驟2:使用create從乙個遠端資料庫複製資料到本地資料庫。
copy from hr/@bostondb-create empcopy-using select*from hr
步驟3:為其他使用者複製資料。
copy from hr/hr@dbora-create job-using select*from renbs.jobs
以使用者hr連線到資料庫dbora,將renbs模式的jobs表複製到當前本地資料庫。
步驟4:在同乙個資料庫中可將乙個模式的表複製到另乙個模式中。同樣必須指定使用者口令和資料庫服務名。
copy from hr/password@mydatabase-insert employee_copy2-using select * from employee_copy
步驟5:在同乙個遠端資料庫中複製表,必須是關鍵字from和to中包含相同使用者名稱和資料庫服務名。
copy from hr/password@daliandb-to hr/password@daliandb-insert employee_copy2-using select * from employee_copy
oracle 複製表與複製表結構
一 複製表的語法 create table 表名稱 as 子查詢 例子 複製oracel安裝後的預設資料庫scott中的表emp create table myemp as select from emp 此例是表示表結構和表內容一起複製過來了。二 複製表結構 create table 表名稱 as...
oracle複製表資料,複製表結構
1.不同使用者之間的表資料複製 對於在乙個資料庫上的兩個使用者a和b,假如需要把a下表old的資料複製到b下的new,請使用許可權足夠的使用者登入sqlplus insert into b.new select from a.old 如果需要加條件限制,比如複製當天的a.old資料 insert i...
oracle 複製表與複製表結構
一 複製表的語法 create table 表名稱 as 子查詢 例子 複製oracel安裝後的預設資料庫scott中的表emp create table myemp as select from emp 此例是表示表結構和表內容一起複製過來了。二 複製表結構 create table 表名稱 as...