标签:
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
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:\b.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语句:
表:
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:\oracle\product\10.2.0\oradata\JBITDB\EPET.DBF 大小为100M
CREATE TABLESPACE epet_tablespace
DATAFILE ‘E:\oracle\product\10.2.0\oradata\JBITDB\EPET.DBF‘
SIZE 100M;
ALTER TABLESPACE JIANGWFTABLESPACE ADD DATAFILE ‘E:\PROJECTS\ZHONGHUA\PROJECT\DATABASE\ZHONGHUA\JIANGWFTABLESPACE2.DBF‘
size 50m;
ALTER TABLESPACE "TEMPTABLESPACE" ADD DATAFILE ‘E:\PROJECTS\ZHONGHUA\PROJECT\DATABASE\ZHONGHUA\JIANGWFTABLESPACE2.ORA‘
SIZE 5M AUTOEXTEND ON NEXT 100K MAXSIZE UNLIMITED
Meathod1:给表空间增加数据文件
ALTER TABLESPACE app_data ADD DATAFILE
‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF‘ SIZE 50M;
Meathod2:新增数据文件,并且允许数据文件自动增长
ALTER TABLESPACE app_data ADD DATAFILE
‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.DBF‘ SIZE 50M
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
Meathod3:允许已存在的数据文件自动增长
ALTER DATABASE DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF‘
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
Meathod4:手工改变已存在数据文件的大小
ALTER DATABASE DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP02.DBF‘
RESIZE 100M;
alter database datafile ‘E:\PROJECTS\ZHONGHUA\PROJECT\DATABASE\ZHONGHUA\JIANGWFTABLESPACE3.DBF‘
resize 10M
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。
connect角色具有一般应用开发人员需要的大部分权限,当建立了一个用户后,多数情况下,只要给用户授予connect和 resource角色就够了,那么connect角色具有哪些系统权限呢?
alter session
create table
create view
create sequence create cluster
create database link
create session
resource角色具有应用开发人员所需要的其它权限,比如建立存储过程,触发器等。这里需要注意的是 resource角色隐含了unlimited tablespace系统权限。
resource角色包含以下系统权限:
create cluster
create indextype
create table
create sequence create type
create procedure
create trigger
dba角色具有所有的系统权限,及with admin option选项,默认的dba用户为sys和system,它们可以将任何系统权限授予其他用户。但是要注意的是dba角色不具备sysdba和sysoper的特权(启动和关闭数据库)。
自定义角色.
顾名思义就是自己定义的角色,根据自己的需要来定义。一般是dba来建立,如果用别的用户来建立,则需要具有create role的系统权限。在建立角色时可以指定验证方式(不验证,数据库验证等)。
CREATE ROLE "QIUDINGROLE" NOT IDENTIFIED;
把角色赋予某个用户
GRANT "CONNECT" TO "QIUDINGROLE";
GRANT "DBA" TO "QIUDINGROLE";
GRANT "RESOURCE" TO "QIUDINGROLE";
grant select on scott.emp to 角色名;
grant insert, update, delete on scott.emp to 角色名;
grant 角色名 to 用户名称
GRANT DBA TO用户名称;
GRANT resource TO用户名称;
SQL> select * from dba_roles;
· 必须以字母开头
· 长度不能超过30个字符
· 不能使用oracle的保留字
· 只能使用如下字符 A-Z,a-z,0-9,$,#等
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‘);
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;
CREATE SEQUENCE myCus_seq
START WITH 1
INCREMENT BY 1
NOMAXVALUE
CACHE 10;
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;
/
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;
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
*********************************************************************************************
创建函数
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;
create or replace procedure update_emp_sal
(Name in out type,
Name in out type, ...
) is
begin
end update_emp_sal;
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
包用于组合逻辑相关的过程和函数,它由包规范和包体两个部分组成。包规范用于定义公用的常量、变量、过程和函数,创建包规范可以使用CREATE PACKAGE命令,创建包体可以使用CREATE PACKAGE BODY
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
这种方式可以导出当前用户拥有的所有对象,包括表、视图、触发器、同义词等等,对于表,只能导出表结构,不能导出数据,选中要导出的对象,设置好导出的路径和各个参数后,点击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”方式导出再导入后,表结构和索引结构没有发生变化,另两种方式都改变了索引类型。 导入的情况和导出一样
标签:
原文地址:http://www.cnblogs.com/nucdy/p/5619505.html