部分Oracle命令(随时更新)

如有错误 请多多指教

/*
--通过SQLPLUS登录数据库
1  如果只是单一数据库
   运行cmd  回车
   然后运行 sqlplus  回车
   根据提示输入用户名和密码登录
2  运行cmd   回车
   然后运行 sqlplus username/password 回车
   或者
   运行cmd   回车
   然后运行 sqlplus /nolog
   然后  connect  username/password
3  如果有多个数据库实例
   则可以先设置自己需要用的数据库实例为当前实力
   运行cmd  
   然后运行 set oracle_sid=DBname  回车
   然后可根据上边的1 , 2 登录
*/
CREATE TABLE student
(
  SID   NUMBER(2,0) NOT NULL ,
  SNAME VARCHAR2(12) NOT NULL
)

--插入数据
INSERT INTO student VALUES
(2,'s2',22)


--更新数据
--利用子查询来更新数据
UPDATE STUDENT
SET
  (
    SID  ,
    SNAME,
    SAGE
  )=( SELECT * FROM student WHERE sid=2 ) WHERE SID=4;
  
--删除数据
DELETE FROM student WHERE SID=

--提交数据
COMMIT ;

--查询
SELECT * FROM student;
--查询中使用运算表达式
SELECT SID,SNAME,SAGE+10 FROM student;
--使用列别名
SELECT SID AS "编号", SNAME AS "姓名", SAGE AS "年龄" FROM student;
--连接字符串(在sqlplus中可以看到结果)
SELECT SNAME||'的年龄是'|| SAGE AS "学生信息" FROM student WHERE SID =2--修改表结构  
ALTER TABLE student RENAME 
COLUMN StudentID TO SID ;

ALTER TABLE student RENAME
COLUMN StudentName TO SNAME;

ALTER TABLE student RENAME
COLUMN StudentAge TO SAGE;

--查询表结构
DESC student;

--修改表结构 增加列
ALTER TABLE student ADD( SAGE NUMBER(2));

--查询前N行 相当于SQL Srever中的 top
--sql: select top 4  from tablename
SELECT * FROM student WHERE ROWNUM<=1;
-- like 查询
SELECT SNAME FROM student WHERE sname LIKE '%1%';
--IN 子句
SELECT * FROM student WHERE SID IN(1,3);
--COUNT函数 统计行数
SELECT COUNT(*) FROM student ;
--avg函数 平均值
SELECT AVG(SID) FROM student;
--sum 函数 求和
SELECT SUM(SID) FROM student;
--MAX MIN 函数
SELECT MAX(SID),MIN(SID) FROM student;



--PL/SQL块
DECLARE
  v_age NUMBER(2);
  --以上为定义一个整形变量
BEGIN
  v_age := 60;                          -- 给整形变量赋值
  dbms_output.put_line('测试输出:'||v_age); --输出变量的值
END;
--SQL/PL 语句块在 sql plus中的编写
/*VAR AGE NUMBER
BEGIN
SELECT SGAE INTO :AGE FRON STUDENT WHERE SID=2;
END;
/
PRINT AGE ;
*/
--if else 语句
DECLARE
  v_x NUMBER(2);
  v_y NUMBER(2);
BEGIN
  v_x   :=3;
  IF v_x <2 THEN
    v_y :=1;
  ELSE
    v_y := 0;
  END IF;
  DBMS_OUTPUT.put_line('V_X:'||v_x);
  DBMS_OUTPUT.put_line('V_Y:'||v_y);
END;
--创建和被复制的表结构相同的表 但是不会想新表中写入数据  where 1=2
create table table_name(新表) as select * from table_name(被复制的表) where 1=2
--修改用户密码
ALTER USER "UserName" IDENTIFIED BY "NewPwd"

 

SELECT A.*, CASE   
 WHEN sage= 12 THEN '等于12'
 WHEN  sage>12  THEN '大于12'
  ELSE 'UNKNOW' END 
FROM testtable  A

SELECT A.*, CASE  sage
 WHEN  12  THEN '等于12'
 WHEN  24  THEN '等于24'
  ELSE 'UNKNOW' END 
FROM testtable  A
--注意二者的区别 一个需要在case后边加上字段名 另一个不需要 

 

 
--取两日期之间的差(天数)
select  to_date('2012-05-04','YYYY-MM-DD')-trunc(sysdate) from dual

--trunc 的用法 
 
--一、用于date类型 

SELECT trunc(sysdate,'mm')FROM dual --返回当月的第一天 
SELECT trunc(sysdate,'yyyy')FROM dual --返回当年第一天 
SELECT trunc(sysdate,'day')FROM dual --返回当周第一天 
SELECT trunc(sysdate,'dd')FROM dual --返回当天 
SELECT trunc(sysdate)FROM dual --返回当天 


--二、用于number类型 

select trunc(1.1415926) from dual --截掉小数部分 
select trunc(1.1415926,2) from dual --保留两位小数(不做四舍五入处理) 
select trunc(1.1415926,-1) from dual --返回零 截取整数部分第一位,并以零代替 

 

--修改时间的显示格式

select  sysdate from dual;

ALTER SESSION SET NLS_language=american;

ALTER SESSION SET NLS_DATE_FORMAT='YYYY-mm-DD';

 

--修改列名 但是已经有数据 不能直接修改

alter table table_name add  temp varchar2(300) ;

update table_name set  temp = old_cloumn;

alter table table_name rename column old_cloumn to temp2; 

alter table table_name rename column temp to old_cloumn ;

--删除之前注意数据是否已经复制成功 temp2保存原始数据

alter table table_name drop column temp2;

 

关于数据的导入导出

---------------------------------
--创建虚拟目录  该命令并不会在物理磁盘上创建该目录  需要手动创建  
--BACK_DIR 目录名称  as 后的为目录路径
create directory BACK_DIR as 'E:\Work\Backoracle_dump';

--查询创建了那些目录
select * from dba_directories

--删除目录
DROP directory  BACK_DIR ;

--导出数据
--BU_USER/bu13991@bu13991   uid/pwd@dSID  
--DIRECTORY=EXPDP_DIR       如上创建的目录名
--DUMPFILE=S_SPXX_73.dump   导出之后的文件名
--VERSION=10.2.0.1.0        版本    
--TABLES=S_SPXX_73          从哪个表导出
Expdp BU_USER/bu13991@bu13991 DIRECTORY=EXPDP_DIR DUMPFILE=S_SPXX_73.dump VERSION=10.2.0.1.0    TABLES=S_SPXX_73

--  参数基本与导出数据相同

impdp bu_user/bu13991@bu13991  directory=EXPDP_DIR  dumpfile= S_UNION_COUNT_LOG_73.dump table_exists_action = replace 
--------------------------------------------------------------------------------- ExpDB_Impdb导入导出数据表 -- 一 创建要导出的目录 CREATE DIRECTORY DRI_Backup AS 'E:\Work\Backoracle_dump'; -- E:\Work\Backoracle_dump 该目录需要手动创建 -- 二 在dos中执行以下命令 --导入表和库 --表: Impdp USER/PWD@SID DIRECTORY=DRI_Backup DUMPFILE=S_SPXX_73.dump VERSION=10.2.0.1.0 TABLE_EXISTS_ACTION = replace LOGFILE=ImpdbTableLog.log --Impdp bu_user/bu13991@bu13991 DIRECTORY=DRI_Backup DUMPFILE=S_CONFIG_73.dump table_exists_action = replace LOGFILE=ImpdbTableLog.log --S_SPXX_73.dump<导出后文件名> VERSION=10.2.0.1.0<版本> TABLES=S_SPXX_73<要导出的表名> --库: Impdp USER/PWD@SID DIRECTORY=DRI_Backup DUMPFILE= BU13991_20120418.DUMP TABLE_EXISTS_ACTION = replace LOGFILE=ImpdbDBLog.log --Impdp bu_user/bu13991@bu13991 DIRECTORY=DRI_Backup DUMPFILE= BU13991-20120418.DUMP table_exists_action = replace LOGFILE=ImpdbDBLog.log --导出表和库 --表: Expdp USER/PWD@SID DIRECTORY=DRI_Backup DUMPFILE=S_SPXX_73.dump TABLES=S_SPXX_73 LOGFILE=ExpdbTableLog.log --Expdp bu_user/bu13991@bu13991 DIRECTORY=DRI_Backup DUMPFILE=S_CONFIG_73.dump TABLES=S_CONFIG_73 LOGFILE=ExpdbTableLog.log --S_SPXX_73.dump<导出后文件名> VERSION=10.2.0.1.0<版本> TABLES=TABLE_NAME<要导出的表名> --库: Expdp USER/PWD@SID DIRECTORY=DRI_Backup DUMPFILE= BU13991_20120218.DUMP FULL=Y LOGFILE=ExpdbDBLog.log --全库导出 --Expdp bu_user/bu13991@bu13991 DIRECTORY=DRI_Backup schemas=BU_USER DUMPFILE= BU13991_20120418.DUMP LOGFILE=ExpdbDBLog.log -- 只导出该用户

 

以下是来自网络的更详细的解释

/*
一、创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建。
create directory dpdata1 as 'd:\test\dump';

二、查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
select * from dba_directories;

三、给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予。
grant read,write on directory dpdata1 to scott;

四、导出数据
1)按用户导
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
2)并行进程parallel
expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3
3)按表名导
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;
4)按查询条件导
expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
5)按表空间导
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;
6)导整个数据库
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;

五、还原数据
1)导到指定用户下
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;
2)改变表的owner
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
3)导入表空间
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
4)导入数据库
impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
5)追加数据
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION=append;


使用exclude,include导出数据
1、Include导出用户中指定类型的指定对象
--仅导出lttfm用户下以B开头的所有表,包含与表相关的索引,备注等。不包含过程等其它对象类型:
expdp lttfm/lttfm@fgisdb dumpfile=include_1.dmp logfile=include_1.log directory=dir_dp job_name=my_job include=TABLE:\"LIKE \'B%\'\"

--导出lttfm用户下排除B$开头的所有表:
expdp lttfm/lttfm@fgisdb schemas=lttfm dumpfile=include_1.dmp logfile=include_1.log directory=dir_dp job_name=my_job include=TABLE:\"NOT LIKE \'B$%\'\"

--仅导出lttfm用户下的所有存储过程:
expdp lttfm/lttfm@fgisdb schemas=lttfm dumpfile=include_1.dmp logfile=include_1.log directory=dir_dp job_name=my_job include=PROCEDURE;   

2、Exclude导出用户中指定类型的指定对象
--导出lttfm用户下除TABLE类型以外的所有对象,如果表不导出那么与表相关的索引,约束等与表有关联的对象类型也不会被导出:
expdp lttfm/lttfm@fgisdb schemas=lttfm dumpfile=exclude_1.dmp logfile=exclude_1.log directory=dir_dp job_name=my_job exclude=TABLE;

--导出lttfm用户下排除B$开头的所有表:
expdp lttfm/lttfm@fgisdb dumpfile=include_1.dmp logfile=include_1.log directory=dir_dp job_name=my_job exclude=TABLE:\"LIKE\'b$%\'\";

--导出lttfm用户下的所有对象,但是对于表类型只导出以b$开头的表:
expdp lttfm/lttfm@fgisdb dumpfile=include_1.dmp logfile=include_1.log directory=dir_dp job_name=my_job exclude=TABLE:\"NOT LIKE \'b$%\'\";


*/
 

转载于:https://www.cnblogs.com/ShuiMu/articles/2442493.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值