oracle的常规操作(基本命令) 前言: 连接数据库: 表空间管理 用户管理: 角色管理 Oracle表的管理 SQL编程语法: 自定义函数和使用 存储过程相关: Oracle创建包 用pl/sql developer导出表结构和数据

 Oracle基本命令

前言:... 3

连接数据库:... 3

使用sql*plus连接oracle. 3

命令方式... 3

文件操作命令... 3

显示和设置环境变量... 3

查看当前所有表... 4

查询当前日期... 4

查看本用户下的各种对象的SQL脚本... 4

表空间管理... 5

概述:... 5

查看表空间的名字和所属文件... 5

创建表空间:... 6

修改表空间并为表空间添加物理文件:... 6

增加表空间大小的四种方法... 6

修改物理文件大小... 6

修改用户表table的表空间... 7

查询所有用户表:... 7

删除表空间:... 7

移动表至另一表空间... 7

建立临时表空间... 7

设定后查看表空间信息... 7

用户管理:... 7

创建用户... 7

概述:... 7

创建用户... 8

查看当前用户所属角色:... 8

查看当前用户的缺省表空间... 8

查看某用户所拥有的对象:... 8

查看某用户的所有表:... 8

给用户修改密码... 8

删除用户... 8

角色管理... 9

1.connect角色... 9

2.resource角色... 9

3.dba角色... 9

4:创建角色:... 9

5:给角色授权:... 10

6:把某个角色的权限赋予某个用户... 10

7:显示所有角色... 10

Oracle表的管理... 10

表名和列的命名规则... 10

oracle支持的数据类型... 10

字符类... 10

数字型... 11

日期类型... 11

日期类型相关函数和格式转换函数的使用... 11

图片... 13

创建表的案例... 13

建一个和a表结构一样的空表... 13

创建序列(名称为:myCus_seq)... 14

SQL编程语法:... 14

循环的语句格式:... 14

自定义函数和使用... 15

创建函数... 15

Oracle创建函数(function)... 15

案例1:... 15

案例2:... 16

存储过程相关:... 16

1、基本语法... 16

写一个简单的例子修改emp表的ename字段... 16

有返回值的存储过程... 17

Oracle创建包... 17

概述:... 17

1、创建包规范... 17

实例:... 18

用pl/sql developer导出表结构和数据... 19

1、点击Tools--Export User Objects 19

2、如果想将表中数据一起导出,可用Tools--Export Tables 19

第一种是导出为.dmp的文件... 19

第二种是导出为.sql文件:... 19

第三种是导出为.pde格式:... 19

连接数据库:

使用sql*plus连接oracle

命令方式

1.conn[ect]

用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或是as sysoper

远程连接:sqlplus usr/pwd@//host:port/sid 如:conn sys/admin@127.0.0.1:1521/orcl as sysdba;

2.disc[onnect]

说明: 该命令用来断开与当前数据库的连接

3.psssw[ord]

说明: 该命令用于修改用户的密码,如果要想修改其它用户的密码,需要用sys/system登录。4.show user

说明: 显示当前用户名

5.exit

说明: 该命令会断开与数据库的连接,同时会退出sql*plus

文件操作命令

1.start和@

说明: 运行sql脚本

案例: sql>@ d:a.sql或是sql>start d:a.sql

2.edit

说明: 该命令可以编辑指定的sql脚本

案例: sql>edit d:a.sql,这样会把d:a.sql这个文件打开

3.spool

说明: 该命令可以将sql*plus屏幕上的内容输出到指定文件中去。

案例: sql>spool d:.sql 并输入 sql>spool off

显示和设置环境变量

概述:可以用来控制输出的各种格式,show all可以显示当前相关的设置

1.linesize

说明:设置显示行的宽度,默认是80个字符

show linesize

set linesize 90

查看当前所有表:

select * from tab;

查询当前日期

select to_char(sysdate,'yyyy-mm-dd,hh24:mi:ss') from dual;

查看本用户下的各种对象的SQL脚本

SQL语句:

表:

  select * from cat;

  select * from tab;

  select table_name from user_tables;

视图:

  select text from user_views where view_name=upper('&view_name');

索引:

  select index_name,table_owner,table_name,tablespace_name,status from user_indexes order by table_name;

触发器:

  select trigger_name,trigger_type,table_owner,table_name,status from user_triggers;

快照:

  select owner,name,master,table_name,last_refresh,next from user_snapshots order by owner,next;

同义词:

  select * from syn;

序列:

  select * from seq;

数据库链路:

  select * from user_db_links;

约束限制:

  select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS from user_constraints;

本用户读取其他用户对象的权限:

  select * from user_tab_privs;

本用户所拥有的系统权限:

  select * from user_sys_privs;

用户:

  select * from all_users order by user_id;

表空间剩余*空间情况:

  select tablespace_name,sum(bytes) 总字节数,max(bytes),count(*) from dba_free_space group by tablespace_name;

数据字典:

  select table_name from dict order by table_name;

锁及资源信息:

  select * from v$lock;不包括DDL锁

数据库字符集:

  select name,value$ from props$ where name='NLS_CHARACTERSET';

inin.ora参数:

  select name,value from v$parameter order by name;

SQL共享池:

  select sql_text from v$sqlarea;

数据库:

  select * from v$database

控制文件:

  select * from V$controlfile;

重做日志文件信息:

  select * from V$logfile;

来自控制文件中的日志文件信息:

  select * from V$log;

来自控制文件中的数据文件信息:

  select * from V$datafile;

NLS参数当前值:

  select * from V$nls_parameters;

ORACLE版本信息:

  select * from v$version;

描述后台进程:

  select * from v$bgprocess;

查看版本信息:

  select * from product_component_version;

表空间管理

概述:

Oracle表空间是数据管理的基本方法,所有用户的对象要存放在表空间中,也就是用户有空间的使用权,才能创建用户对象。否则是不充许创建对象,因为就是想创建对象,如表,索引等,也没有地方存放,Oracle会提示:没有存储配额。因此,在创建对象之前,首先要分配存储空间。分配存储,就要创建表空间

Oracle可以创建的表空间有三种类型:

(1)TEMPORARY: 临时表空间,用于临时数据的存放;创建临时表空间的语法如下:CREATE TEMPORARY TABLESPACE "SAMPLE"。。。。。。

(2)UNDO : 还原表空间。用于存入重做日志文件。创建还原表空间的语法如下:CREATE UNDOTABLESPACE "SAMPLE"。。。。。。

(3)用户表空间: 最重要,也是用于存放用户数据表空间可以直接写成: CREATE TABLESPACE"SAMPLE"TEMPORARY 和 UNDO 表空间是Oracle 管理的特殊的表空间。只用于存放系统相关数据。

查看表空间的名字和所属文件

select tablespace_name, file_id, file_name,

round(bytes/(1024*1024),0) total_space

from dba_data_files

order by tablespace_name;

创建表空间:

创建表空间名称为:epet_tablespace

表空间的物理文件位置:E:oracleproduct10.2.0oradataJBITDBEPET.DBF 大小为100M

CREATE TABLESPACE epet_tablespace

DATAFILE 'E:oracleproduct10.2.0oradataJBITDBEPET.DBF'

SIZE 100M;

修改表空间并为表空间添加物理文件:

ALTER TABLESPACE JIANGWFTABLESPACE ADD DATAFILE 'E:PROJECTSHONGHUAPROJECTDATABASEHONGHUAJIANGWFTABLESPACE2.DBF'

size   50m;

 

ALTER TABLESPACE "TEMPTABLESPACE" ADD DATAFILE 'E:PROJECTSHONGHUAPROJECTDATABASEHONGHUAJIANGWFTABLESPACE2.ORA'

SIZE 5M AUTOEXTEND ON NEXT 100K MAXSIZE UNLIMITED

增加表空间大小的四种方法

 Meathod1:给表空间增加数据文件

 ALTER TABLESPACE app_data ADD DATAFILE

 'D:ORACLEPRODUCT10.2.0ORADATAEDWTESTAPP03.DBF' SIZE 50M;

 

 Meathod2:新增数据文件,并且允许数据文件自动增长

 ALTER TABLESPACE app_data ADD DATAFILE

 'D:ORACLEPRODUCT10.2.0ORADATAEDWTESTAPP04.DBF' SIZE 50M

 AUTOEXTEND ON NEXT 5M MAXSIZE 100M;

 

 Meathod3:允许已存在的数据文件自动增长

 ALTER DATABASE DATAFILE 'D:ORACLEPRODUCT10.2.0ORADATAEDWTESTAPP03.DBF'

 AUTOEXTEND ON NEXT 5M MAXSIZE 100M;

 

 Meathod4:手工改变已存在数据文件的大小

 ALTER DATABASE DATAFILE 'D:ORACLEPRODUCT10.2.0ORADATAEDWTESTAPP02.DBF'

 RESIZE 100M;

修改物理文件大小

alter database datafile 'E:PROJECTSHONGHUAPROJECTDATABASEHONGHUAJIANGWFTABLESPACE3.DBF'

resize 10M

修改用户表table的表空间

alter table 表名 move tablespace 新表空间名;

查询所有用户表:

select * from user_tables;

删除表空间:

drop tablespace 表空间名称

移动表至另一表空间

alter table move tablespace room1;

建立临时表空间

CREATE TEMPORARY TABLESPACE temp_data

TEMPFILE '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M

设定后查看表空间信息

SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,

(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"

FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C

WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;

用户管理:

创建用户

概述:在oracle中要创建一个新的用户使用create user语句,一般是具有dba(数据库管理员)的权限才能使用。

 语法格式:create user 用户名 identified by 密码;

创建用户

create user EPET

  identified by "BDQN"

  default tablespace "EPET_TABLESPACE"

  temporary tablespace "DIAOCHA_TEMP"

  profile DEFAULT

  ACCOUNT UNLOCK;

给用户赋予某个角色的权限:

grant 角色 to QIUDING;

grant unlimited tablespace to QIUDING

查看当前用户所属角色:

select * from user_role_privs;

查看当前用户的缺省表空间

 select username,default_tablespace from user_users;

查看某用户所拥有的对象:

SELECT owner,object_name, object_type FROM dba_objects WHERE owner= 'EPET';

查看某用户的所有表:

select * from all_tables where owner='SHOPXP';--用户名称为“SHOPXP”的所有表

给用户修改密码

概述:如果给自己修改密码可以直接使用

password 用户名

如果给别人修改密码则需要具有dba的权限,或是拥有alter user的系统权限

alter user 用户名 identified by 新密码

删除用户

概述:一般以dba的身份去删除某个用户,如果用其它用户去删除用户则需要具有drop user的权限。

比如 drop user 用户名 【cascade】

在删除用户时,注意:

如果要删除的用户,已经创建了表,那么就需要在删除的时候带一个参数cascade;

权限说明:

创建的新用户是没有任何权限的,甚至连登陆的数据库的权限都没有,需要为其指定相应的权限。给一个用户赋权限使用命令grant,回收权限使用命令revoke。

角色管理

1.connect角色

 connect角色具有一般应用开发人员需要的大部分权限,当建立了一个用户后,多数情况下,只要给用户授予connect和 resource角色就够了,那么connect角色具有哪些系统权限呢?

 alter session

 create table

 create view

 create sequence create cluster

 create database link

 create session

 2.resource角色

 resource角色具有应用开发人员所需要的其它权限,比如建立存储过程,触发器等。这里需要注意的是 resource角色隐含了unlimited tablespace系统权限。

 resource角色包含以下系统权限:

 create cluster

 create indextype

 create table

 create sequence  create type

 create procedure

 create trigger

3.dba角色

 dba角色具有所有的系统权限,及with admin option选项,默认的dba用户为sys和system,它们可以将任何系统权限授予其他用户。但是要注意的是dba角色不具备sysdba和sysoper的特权(启动和关闭数据库)。

 自定义角色.

 顾名思义就是自己定义的角色,根据自己的需要来定义。一般是dba来建立,如果用别的用户来建立,则需要具有create role的系统权限。在建立角色时可以指定验证方式(不验证,数据库验证等)。

4:创建角色:

CREATE ROLE "QIUDINGROLE" NOT IDENTIFIED;

把角色赋予某个用户

GRANT "CONNECT" TO "QIUDINGROLE";

GRANT "DBA" TO "QIUDINGROLE";

GRANT "RESOURCE" TO "QIUDINGROLE";

5:给角色授权:

grant select on scott.emp to 角色名;

grant insert, update, delete on scott.emp to 角色名;

6:把某个角色的权限赋予某个用户

grant 角色名 to 用户名称

GRANT DBA TO用户名称; 

GRANT resource TO用户名称;

7:显示所有角色

 SQL> select * from dba_roles;

Oracle表的管理

表名和列的命名规则

· 必须以字母开头

· 长度不能超过30个字符

· 不能使用oracle的保留字

· 只能使用如下字符 A-Z,a-z,0-9,$,#等

oracle支持的数据类型

 字符类

char    定长 最大2000个字符。

例子:char(10)  ‘小韩’前四个字符放‘小韩’,后添6个空格补全 如‘小韩      ’ varchar2(20)  变长  最大4000个字符。

例子:varchar2(10) ‘小韩’ oracle分配四个字符。这样可以节省空间。

clob(character large object) 字符型大对象 最大4G

char 查询的速度极快浪费空间,查询比较多的数据用。

varchar 节省空间

数字型

number范围 -10的38次方 到 10的38次方,可以表示整数,也可以表示小数 :number(5,2)表示一位小数有5位有效数,2位小数

范围:-999.99到999.99

number(5)  表示一个5位整数

范围99999到-99999

日期类型

date 包含年月日和时分秒   oracle默认格式  1-1月-1999

timestamp 这是oracle9i对date数据类型的扩展。可以精确到毫秒。

日期类型相关函数和格式转换函数的使用

获取系统日期:  SYSDATE()

格式化日期:    TO_CHAR(SYSDATE(),'YY/MM/DD HH24:MI:SS)

      或        TO_DATE(SYSDATE(),'YY/MM/DD HH24:MI:SS)

格式化数字:    TO_NUMBER

       注:     TO_CHAR  把日期或数字转换为字符串

                TO_CHAR(number, '格式')

                TO_CHAR(salary, '$99,999.99')

                TO_CHAR(date, '格式')

                TO_DATE  把字符串转换为数据库中的日期类型

                TO_DATE(char, '格式')

                TO_NUMBER  将字符串转换为数字

                TO_NUMBER(char, '格式')

返回系统日期,输出 25-12月-09

select sysdate from dual;

mi是分钟,输出 2009-12-25 14:23:31

select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;

mm会显示月份,输出 2009-12-25 14:12:31

select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;

输出 09-12-25 14:23:31

select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual 

输出 2009-12-25 14:23:31

select to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh24:mi:ss') from dual

而如果把上式写作:

 select to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh:mi:ss') from dual

则会报错,因为小时hh是12进制,14为非法输入,不能匹配。

输出 $10,000,00 :

select to_char(1000000,'$99,999,99') from dual;

输出 RMB10,000,00 :

select to_char(1000000,'L99,999,99') from dual;

输出 1000000.12 :

select trunc(to_number('1000000.123'),2) from dual;

select to_number('1000000.123') from dual;

转换的格式:

表示 year 的:y 表示年的最后一位 、

             yy 表示年的最后2位 、

             yyy 表示年的最后3位 、

             yyyy 用4位数表示年

表示month的: mm 用2位数字表示月 、

             mon 用简写形式, 比如11月或者nov 、

             month 用全称, 比如11月或者november

表示day的: dd  表示当月第几天 、

             ddd 表示当年第几天 、

             dy  当周第几天,简写, 比如星期五或者fri 、

             day 当周第几天,全称, 比如星期五或者friday

表示hour的:hh   2位数表示小时 12进制 、

              hh24 2位数表示小时 24小时

表示minute的:mi 2位数表示分钟

表示second的:ss 2位数表示秒 60进制

表示季度的:q 一位数 表示季度 (1-4)

另外还有ww 用来表示当年第几周 w用来表示当月第几周。

24小时制下的时间范围:00:00:00-23:59:59

12小时制下的时间范围:1:00:00-12:59:59

数字格式:  9  代表一个数字

          0  强制显示0

          $  放置一个$符

          L  放置一个浮动本地货币符

          .  显示小数点

          ,  显示千位指示符

补充:

当前时间减去7分钟的时间

select sysdate,sysdate - interval '7' MINUTE from dual;

当前时间减去7小时的时间

select sysdate - interval '7' hour from dual;

当前时间减去7天的时间

select sysdate - interval '7' day from dual;

当前时间减去7月的时间

select sysdate,sysdate - interval '7' month from dual;

当前时间减去7年的时间

select sysdate,sysdate - interval '7' year from dual;

时间间隔乘以一个数字

select sysdate,sysdate - 8*interval '7' hour from dual;

图片

blob 二进制数据 可以存放图片/声音  4G   一般来讲,在真实项目中是不会把图片和声音真的往数据库里存放,一般存放图片、视频的路径,如果安全需要比较高的话,则放入数据库。

创建表的案例

--创建好了表空间和用户student后

--用student用户登录,就可以创建表了

create table grade

(

gradeid number primary key,

name varchar2(29),

location varchar2(30)

)

--create sequence seq_grade increment by 1 start with 1 nomaxvalue nocycle

--nocache;

--create or replace trigger tri_grade before insert on grade for each row

--begin

 -- select seq_grade.Nextval into:new.gradeid from dual;

--end

insert into grade(gradeid,name,location) values(1,'jiangwf','shenzhen');

insert into grade(gradeid,name,location) values(2,'zhulei','shenzhen');

insert into grade(gradeid,name,location) values(3,'jianghaoyu','shenzhen');

select * from grade

create table 学生表

(

学生编号 number primary key,

学生姓名 varchar2(50),

学生地址 varchar2(50)

);

insert into 学生表(学生编号,学生姓名,学生地址) values(1,'jiangwf','shenzhen');

insert into 学生表(学生编号,学生姓名,学生地址) values(2,'zhulei','shenzhen');

insert into 学生表(学生编号,学生姓名,学生地址) values(3,'jianghaoyu','shenzhen');

建一个和a表结构一样的空表

create table b as select * from a where 1=2;

create table b(b1,b2,b3) as select a1,a2,a3 from a where 1=2;

创建序列(名称为:myCus_seq)

CREATE SEQUENCE myCus_seq

START WITH 1

INCREMENT BY 1

NOMAXVALUE

CACHE 10;

SQL编程语法:

循环的语句格式:

declare

x number;

begin

x:=0;

loop

x:=x+1;

if x>=3 then

exit;

end if;

dbms_output.put_line('内部x='||x);

end loop;

dbms_output.put_line('外部x='||x);

end;

/

-------------------------------------------------------------

begin

for i in 1..5 loop

dbms_output.put_line('内部i='||i);

end loop;

dbms_output.put_line('结束');

end;

/

---------------------------------------------------------------

declare

x number;

begin

x:=0;

while x<=3 loop

x:=x+1;

dbms_output.put_line('内部x='||x);

end loop;

dbms_output.put_line('外部x='||x);

end;

/

自定义函数和使用

创建函数

Oracle创建函数(function)

1、基本语法规则如下:

create or replace function (Name in type, Name in type, ...) return number is

  Result number;

begin

  return (Result);

end ;

----例子---------------------------------------------------------------------

 create or replace function getmastername(uid number) return varchar2

 as

 mname varchar2(50);

 begin

 select  loginid into mname from master where master.id=uid;

 return mname;

 end;

案例1:

create or replace function jiangwf.getUserName(userid varchar2)

return varchar2

is

uName varchar2(50);

begin

select nvl(UserName,'') into uName from jiangwf.UserInfo where UserNo=userid;

return uName;

end;

调用函数

select jiangwf.getUserName(UserNo),jiangwf.UserInfo.UserPWD from jiangwf.UserInfo

*********************************************************************************************

案例2:

创建函数

create or replace function jiangwf.getUserPWD(userid varchar2)

return varchar2

is

UserPassWord varchar2(50);

begin

select nvl(UserPWD,'') into UserPassWord from jiangwf.UserInfo where UserNo=userid;

return UserPassWord;

end;

调用:

select jiangwf.UserInfo.*,jiangwf.getUserPWD(UserNo) from jiangwf.UserInfo;

存储过程相关:

1、基本语法

create or replace procedure update_emp_sal

(Name in out type,

 Name in out type, ...

) is

begin

 

end update_emp_sal;

写一个简单的例子修改emp表的ename字段

create or replace procedure update_emp

(

v_empno  varchar2,

v_ename  varchar2

) is

begin

update emp set ename=v_ename where empno=v_empno; 

end update_emp;

调用方法如下:

exec  update_emp('7935','test');

有返回值的存储过程

就写一个简单的返回empno=7935的sal值

create or replace procedure emp_out_sal

 (

 v_empno in varchar2,

 v_sal out number

 ) is

 vsal number(7,2);

 begin

      select sal into vsal from emp where empno=v_empno;

      v_sal:=vsal;

 end;

调用有返回值的过程

var vsal number

exec emp_out_sal('7935',:vsal);

PL/SQL procedure successfully completed

vsal

---------

700

SQL> var vsal number

SQL> call emp_out_sal('7935',:vsal);

Method called

vsal

---------

700

Oracle创建包

概述:

包用于组合逻辑相关的过程和函数,它由包规范和包体两个部分组成。包规范用于定义公用的常量、变量、过程和函数,创建包规范可以使用CREATE PACKAGE命令,创建包体可以使用CREATE PACKAGE BODY

1、创建包规范

 create package emp_pkg is

 procedure emp_update_ename(v_empno varchar2,v_ename varchar2);

 function emp_get_sal(v_empno varchar2) return number;

 end;

创建包体

create or replace package body emp_pkg

is

    procedure emp_update_ename

    (

    v_empno varchar2,

    v_ename varchar2

    )

    is

    vename varchar2(32);

    begin

    update emp set ename=v_ename where empno=v_empno;

    commit;

    select ename into vename from emp where empno=v_empno;

  

    dbms_output.put_line('雇员名称:'||vename);

   

    end;

   

    function emp_get_sal

    (

    v_empno varchar2

    )

    return number is

    vsal number(7,2);

    begin

    select sal into vsal from emp where empno=v_empno;

    return vsal;

    end;

end;

在此提示,在没有创建包规范就创建包体,会失败,要使用包,必须先创建包规范,然后在创建包体

当要调用包的过程和函数时,在过程和函数的名称前加上包名作为前缀(包名.子程序名称),而如果要访问其他方案的包时需要在包的名称前加上方案的名称(方案名称.包名.子程序名称)

实例:

SQL> var vsla number

SQL> call emp_pkg.emp_get_sal('7935') into :vsal;

Method called

vsal

---------

700

SQL> exec emp_pkg.emp_update_ename('7935','helong');

雇员名称:helong

SQL> call emp_pkg.emp_update_ename('7935','helong');

Method called

SQL> select * from dual;

DUMMY

-----

X

用pl/sql developer导出表结构和数据

1、点击Tools--Export User Objects

    这种方式可以导出当前用户拥有的所有对象,包括表、视图、触发器、同义词等等,对于表,只能导出表结构,不能导出数据,选中要导出的对象,设置好导出的路径和各个参数后,点击Export就OK

    PS:这种方式还可以导出其他用户的对象,在下面user下拉框中选择要用户就可以,默认是系统当前登录用户

2、如果想将表中数据一起导出,可用Tools--Export Tables:

这种方式导出的文件,本身就带着创建表结构的sql语句 选中要导出的表(可选多个),导出方式有三种:

    Oracle Export,Sql Insert,pl/sql developer

 第一种是导出为.dmp的文件:

.dmp文件是二进制的,可以跨平台,还能包含权限,效率也很不错,用得最广

第二种是导出为.sql文件:

可用文本编辑器查看,通用性比较好,但效率不如第一种,适合小数据量导入导出。尤其注意的是表中不能有大字段(blob,clob),如果有,会提示不能导出,可以用第一种和第三种方式导出。

第三种是导出为.pde格式:

.pde为Pl/sql developer自有的文件格式,只能用Pl/sql developer自己导入导出;不能用编辑器查看,效率不知道怎么样

PS:只有“Oracle Export”方式导出再导入后,表结构和索引结构没有发生变化,另两种方式都改变了索引类型。 导入的情况和导出一样