oracle基础学习

    作者:课课家教育更新于: 2019-04-29 10:15:14

      1.desctable_name可以查询表的结构

      2.怎么获取有哪些用户在使用数据库

      selectusernamefromv$session;

      3.如何在Oracle服务器上通过SQLPLUS查看本机IP地址?

      selectsys_context('userenv','ip_address')fromdual;

      如果是登陆本机数据库,只能返回127.0.0.1

      4.如何给表、列加注释?

      SQL>commentontable表is'表注释';

      注释已创建

      SQL>commentoncolumn表.列is'列注释';

      注释已创建。

      SQL>select*fromuser_tab_commentswherecommentsisnotnull;

      5.如何在ORACLE中取毫秒?

      selectsystimestampfromdual;

      6.如何在字符串里加回车?

      添加一个||chr(10)

      select'Welcometovisit'||chr(10)||'www.CSDN.NET'fromdual;

      7.怎样修改oracel数据库的默认日期?

      altersessionsetnls_date_format='yyyymmddhh24miss';

      8.怎么可以看到数据库有多少个tablespace?

      select*fromdba_tablespaces;

      9.如何显示当前连接用户?

      SHOWUSER

      10.如何测试SQL语句执行所用的时间?

      SQL>settimingon;

      11.怎么把select出来的结果导到一个文本文件中?

      SQL>SPOOLF:\\ABCD.TXT;

      SQL>select*fromtable;

      SQL>spooloff;

      12.如何在sqlplus下改变字段大小?

      altertabletable_namemodify(field_namevarchar2(100));

      改大行,改小不行(除非都是空的)

      13.如果修改表名?

      altertableold_table_namerenametonew_table_name;

      14.如何搜索出前N条记录?(desc降序)

      SELECT*FROMTablenameWHEREROWNUM

      ORDERBYcolumn;

      15.如何在给现有的日期加上2年?

      selectadd_months(sysdate,24)fromdual;

      16.Connectstring是指什么?

      应该是tnsnames.ora中的服务名后面的内容

      17.返回大于等于N的最小整数值?

      SELECTCEIL(-10.102)FROMDUAL;

      18.返回小于等于N的最大整数值?

      SELECTFLOOR(2.3)FROMDUAL;

      19.返回行的物理地址

      SELECTROWID,enameFROMtablenameWHEREdeptno=20;

      20.将N秒转换为时分秒格式?

      setserverouton

      declare

      Nnumber:=1000000;

      retvarchar2(100);

      begin

      ret:=trunc(n/3600)||'小时'||to_char(to_date(mod(n,3600),'sssss'),'fmmi"分"ss"秒"');

      dbms_output.put_line(ret);

      end;

      21.如何监控当前数据库谁在运行什么SQL语句?

      SELECTosuser,username,sql_textfromv$sessiona,v$sqltextb

      wherea.sql_address=b.addressorderbyaddress,piece;

      22.如何知道当前用户的ID号?

      SQL>SHOWUSER;

      OR

      SQL>selectuserfromdual;

      23.如何知道使用CPU多的用户session?

      11是cpuusedbythissession

      selecta.sid,spid,status,substr(a.program,1,40)prog,a.terminal,osuser,value/60/100value

      fromv$sessiona,v$processb,v$sesstatc

      wherec.statistic#=11andc.sid=a.sidanda.paddr=b.addrorderbyvaluedesc;

      24.Oracle建立表空间和用户

      建立表空间和用户的步骤:

      用户

      建立:createuser用户名identifiedby"密码";

      授权:grantcreatesessionto用户名;

      grantcreatetableto用户名;

      grantcreatetablespaceto用户名;

      grantcreateviewto用户名;

      表空间

      建立表空间(一般建N个存数据的表空间和一个索引空间):

      createtablespace表空间名

      datafile'路径(要先建好路径)\\***.dbf'size*M

      tempfile'路径\\***.dbf'size*M

      autoextendon--自动增长

      --还有一些定义大小的命令,看需要

      defaultstorage(

      initial100K,

      next100k,

      );

      用户权限

      授予用户使用表空间的权限:

      alteruser用户名quotaunlimitedon表空间;

      或alteruser用户名quota*Mon表空间;

      createtablespacezqdatafile'D:\\zq\\zw.dbf'SIZE1000MAUTOALLOCATE;

      修改用户的默认表空间

      alteruserusernamedefaulttablespacetablespacename;

      25.在sqlplus中清屏命令:clearsrcclearscreen;clscr;

      怎样用语句查询表空间里面表的内容?

      selecttable_namefromall_tableswheretablespace_name='zq';

      selecttable_namefromuser_tableswheretablespace_name='xx'

      26.如何查询表在哪个表空间中?(单引号里面的要大写)

      SELECTtablespace_nameFROMUSER_TABLESWHEREtable_name='YOUR_TABLENAME'

      查一下,这个表是哪个用户下的,如果是本用户则可以用上面的sql

      如果是别的用户的表你就用

      SELECTtablespace_nameFROMDBA_TABLESWHEREtable_name='YOUR_TABLENAME'andowner='表的OWNER'

      还有你要确定你查的确实是一个表而不是view或SYNONYM

      而且在引号里面的表名和owner都要用大写字母

      27.表的创建

      createtableaa

      (avarchar2(10),

      bnumber(8,2),

      cdate

      )tablespaceusers;

      如果在创建用户时没有指定默认表空间,系统默认表空间为System,在创建表时必须指定tablespace;

      28.如何查询一个表空间下的所有表(单引号里面的要大写)

      selecttable_namefromuser_tableswheretablespace_name='表空间名';

      29.更改计算机名后会出现OracleORA-12541:TNS:nolistener错误解决方法

      D:\\oracle\\product\\10.2.0\\db_1\\NETWORK\\ADMIN\\listener.ora

      修改为现在的计算机名,再次启动OracleOraHome90TNSListener服务成功

      30.创建表时默认表空间是SYSAUX

      31.oracle10gemDatabaseControl的启动问题修复

      打开http://localhost:1158/em/显示数据库状态没有启动,提示用户登录错误ORA-28000:theaccountislocked,使用PL/SQL或SQL*plus

      连接是正常的。到网上搜索一番,没有找到确切的原因。其中一个可能的原因是用户DBSNMP的密码和sys用户的密码不一致,导致

      OracleDBConsoleSID服务错误,网上很多朋友说使用emca(EMConfigurationAssistant)工具进行修复。

      在命令行里键入下面两个命令就可以修复数据库的em

      emca-reposrecreate

      emca-configdbcontroldb

      另外,网上很多朋友给出“emca-r”这样的命令,我试了之后发现10g版本的命令格式已经有所变化,具体的命令格式可以通过命令

      的帮助获得。在命令行中键入

      emcahelp=y

      可以查看详细的命令格式。

      常用的命令语法:

      emca-reposcreate创建一个EM资料库

      emca-reposrecreate重建一个EM资料库

      emca-reposdrop删除一个EM资料库

      emca-configdbcontroldb配置数据库的DatabaseControl

      emca-deconfigdbcontroldb删除数据库的DatabaseControl配置

      emca-reconfigports重新配置dbcontrol的端口,默认端口在1158

      emctlstartconsole启动EMconsole服务,使用前需要先设置ORACLE_SID环境变量

      emctlstopconsole停止EMconsole服务,使用前需要先设置ORACLE_SID环境变量

      32.解决启动Oracle9i的OEM或OMS的常见问题(VTK-1000)

      能否正常启动OEM或OMS关键有以下两点:

      第一.Oracle的系统服务是否开启;

      第二.登录时用的用户名和口令是否正确。

      那么先针对第一点谈谈Oracle的系统服务。在完全安装的情况下,Oracle的系统服务共有11项:

      1.OracleOLAP9.0.1.0.1

      2.OracleOLAPAgent

      3.OracleOraHome90Agent

      4.OracleOraHome90ClientCache

      5.OracleOraHome90HTTPServer

      6.OracleOraHome90ManagementServer(0.5M)

      7.OracleOraHome90PagingServer

      8.OracleOraHome90SNMPPeerEncapsulator

      9.OracleOraHome90SNMPPeerMasterAgent

      10.OracleOraHome90TNSListener(5.2M)

      11.OracleServiceORACLE(70M)

      (注:OraHome90是可以在安装时改变的Oracle的主目录名称,是安装时的默认值)

      其中最重要的服务有3个,分别是OracleOraHome90ManagementServer、OracleOraHome90TNSListener与

      OracleServiceORACLE。下面就来看一下有哪些启动错误与它们有关。

      1.Oracle系统提示:Ora-12541:TNS:没有监听器;

      2.操作系统提示:在本地计算机无法启动OMS服务

      错误:1053:服务并未及时响应来控制请求附带;

      以上两种错误提示大都是由OracleOraHome90TNSListener监听服务引起的。

      解决方法:控制面版->管理工具->服务->右键单击“OracleOraHome90TNSListener”,再单击“启动”。

      3.Oracle系统提示:Ora-12500:TNS:监听程序无法启动专用服务器进程;

      该错误是由OracleServiceORACLE专用服务器进程引起的。

      解决方法:控制面版->管理工具->服务->右键单击“OracleServiceORACLE”,再单击“启动”。

      4.Oracle系统提示:VTK-1000:无法连接到ManagementServer。

      请验证您已输入OracleManagementServer的正确主机名和状态。

      该错误引起的原因有两种,一是OracleOraHome90ManagementServer还没启动;二是没有输入主机名。

      解决方法:控制面版->管理工具->服务->右键单击“OracleOraHome90ManagementServer”,

      再单击“启动”,

      或是输入您这台计算机的完整名称。

      接着针对第二点谈谈登录时用的用户名和口令。

      在安装结束后,系统提供了两个默认的数据库系统管理员,其用户名和口令分别是SYS/change_on_install和SYSTEM/manager,同时系统还

      提供了登录OMS的用户名和口令:sysman/oem_temp。这里容易出现错误的是在登录OMS是用SYS或SYSTEM作为用户名进行登录,那么Oracle系统

      就回有“登录身份证明不正确”的提示。

      小结:这三个服务的启动或关闭还有先后的顺序。一般来讲,启动时必须先启动OracleOraHome90TNSListener再启动

      OracleOraHome90ManagementServer或OracleServiceORACLE,在启动OracleOraHome90ManagementServer时,同时也启动了

      OracleServiceORACLE。而关闭时必须先关闭OracleOraHome90ManagementServer再关闭OracleOraHome90TNSListener或OracleServiceORACLE,

      关闭OracleOraHome90ManagementServer时,若有提示输入用户名和口令,请输入sysman的用户名和口令,以确保成功的执行。有些其他提示如

      :资源已被占用,I/O重复,端口已被使用等等之类的话,那最好与系统管理员联系,再寻求解决办法。

      1)查询数据库名:

      SQL>selectnamefromv$database;

      (2)查询数据库实例名:

      SQL>selectinstance_namefromv$instance;

      (3)查询数据库服务名:

      SQL>selectvaluefromv$parameterwherename='service_names';//(小写)

      (4)查询全局数据库名(sys用户):

      SQL>selectvalue$fromprops$wherename='GLOBAL_DB_NAME';//字符串区分大小写

      监视用户会话:

      SQL>selectusername,sid,serial#,machinefromv$session;

      删除用户会话:

      SQL>altersystemkillsession'sid,serail#';

      //使用下面的方法可以重复执行上一条SQL语句(在SQL*Plus中)

      SQL>l//小写字母L,显示上一条SQL语句

      1*selectusername,sid,serial#,machinefromv$session

      SQL>///正斜杠:重复执行上一条SQL语句

      SQL>setlinesize1000//将SQL*Plus中显示行宽设成1000个字符。

      SQL>connectsystem/manager@orasjz//在SQL*Plus中直接连接到另一台机器上的数据库,@字符后是另

      一台机器的tnsname

      4.手工配置Oracle网络连接:主要是配置"tnsnames.ora"文件。

      A.手工配置Oracle网络连接配置文件:tnsnames.ora

      B.手工配置Oracle监听进程配置文件:listener.ora

      UNIX下启动进程命令:

      $lsnrctlstart//启动监听进程

      $lsnrctlstatus//显示监听进程状态

      $lsnrctlstop//停止监听进程

      启动进程的命令与UNIX相同。

      LISTENER=

      (DESCRIPTION_LIST=

      (DESCRIPTION=

      (ADDRESS_LIST=

      (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))

      )

      (ADDRESS_LIST=

      (ADDRESS=(PROTOCOL=TCP)(HOST=ORA54)(PORT=1521))

      //注意:上面一行的HOST必须是你的主机名,否则监听会出问题,也可以使用你的机器的IP地址

      )

      )

      (DESCRIPTION=

      (PROTOCOL_STACK=

      (PRESENTATION=GIOP)

      (SESSION=RAW)

      )

      (ADDRESS=(PROTOCOL=TCP)(HOST=ORA54)(PORT=2481))

      )

      )

      SID_LIST_LISTENER=

      (SID_LIST=

      (SID_DESC=

      (SID_NAME=PLSExtProc)

      (ORACLE_HOME=..........)

      (PROGRAM=extproc)

      )

      (SID_DESC=

      (GLOBAL_DBNAME=ora54)

      (ORACLE_HOME=..........)

      (SID_NAME=ora54)//注意:ora54为数据库的SID名称,不能更改,否则监听出问题

      )

      )

      5.将主机字符串(HostString)写入注册表(简化SQL*Plus的登录)

      regedit.exe->HKLM->Software->Oracle->home0

      增加关键字:local(字符串),键值:主机字符串名。

      /*将下面的内容复制到一个.reg文件中,在Windows2000中双击执行,即可实现增加或者修改local键值的

      作用

      WindowsRegistryEditorVersion5.00

      [HKEY_LOCAL_MACHINE\\SOFTWARE\\ORACLE\\HOME0]

      "local"="ora54"

      */

      [SVRMGRL:ServerManager的使用方法]

      D:\\>svrmgrl

      SVRMGR>connectinternal//使用svrmgrl,进入后使用的第一个命令必须是这个命令。

      口令://如果要求输入口令,请输入oracle

      连接成功。

      SVRMGR>selectnamefromv$database;//检查当前使用的数据库名

      NAME

      ---------

      ORA44

      已选择1行。

      SVRMGR>shutdownimmediate//关闭当前使用的数据库

      已关闭数据库。

      已卸下数据库。

      已关闭ORACLE实例。

      SVRMGR>startup//启动当前使用的数据库,如果无效,请使用startupforce

      已启动ORACLE实例。

      系统全局区域合计有24433932个字节

      FixedSize70924个字节

      VariableSize7507968个字节

      DatabaseBuffers16777216个字节

      RedoBuffers77824个字节

      ORA-00205:?????????????????????

      SVRMGR>

      [另一个启动oracle数据库的例子]

      d:\\>sqlplusinternal/oracle

      SQL>startupforce//强行重新启动数据库。

      [修改口令字]

      SQL>grantconnecttosystemidentifiedbyNewPassword;//如果用数字作口令,需要使用双引号括起

      来

      SQL>grantconnecttosysidentifiedbyNewPassword;

      SQL>alterusersystemidentifiedbyNewPassword;

      SQL>alterusersysidentifiedbyNewPassword;

      SQL>password//需要输入原口令

      //注:以上修改口令的方法等价;sys与system用户可以互相修改口令;如果sys与system用户的口令都忘

      记了,使用如下方法:

      D:\\>svrmgrl

      SVRMGR>connectinternal/oracle

      连接成功。

      SVRMGR>grantconnecttosystemidentifiedbymanager;

      语句已处理。

      SVRMGR>exit

      服务器管理程序结束。

      、Oracle产品组成

      查询数据库选件产品:

      SQL>select*fromv$option;

      一般都是True,如果是False,可以双击激活。

      /*cartridges(小产品的)插件,(大产品的)选件(options)*/

      [SYS用户是Oracle数据库中权限最大的用户。]

      [SQL*Plus登录方法]

      1.c:\\>sqlplus"/assysdba"

      2.c:\\>sqlplusinternal

      //注意:以上两种方法可以类似的使用于SQL*Plus的图形登录界面中

      //用这种登录方法登录进去,所使用的用户均为SYS。

      [之所以会出现这种登录方法,是因为在NT的用户组中存在一个ORA_DBA的本地组,凡在此组中的用户使用

      操作系统认证,即在此组中的用户登录数据库时不需要密码。]

      [orapwd命令:修改internal用户的口令字]

      /*orapwd的命令行参数

      D:\\>orapwd

      Usage:orapwdfile=password=entries=

      where

      file-nameofpasswordfile(mand),

      password-passwordforSYSandINTERNAL(mand),

      entries-maximumnumberofdistinctDBAandOPERs(opt),

      Therearenospacesaroundtheequal-to(=)character.*/

      修改internal口令字(internal默认口令为oracle)认证方法(AB两个步骤):

      A.修改Oracle登录认证方法:

      修改文件SQLNET.ORA文件。

      SQLNET.AUTHENTICATION_SERVICES=(NTS)//将这一行前面加上#号注释掉,即可将Oracle的认证方法由操作

      系统认证改为Oracle认证

      SQLNET.ORA文件的位置:

      UNIX:/u01/app/oracle/product/8.1.6/network/admin/sqlnet.ora

      WindowsNT/2000:d:\\oracle\\ora81\\network\\admin\\sqlnet.ora

      B.修改Internal口令字:

      WindowsNT/2000:

      C:\\>ORAPWDfile=d:\\oracle\\ora81\\database\\pwdora8i.ora

      password=YourPassword//YourPassword为你要设置的密码

      entries=30

      /*ORAPWDfile=d:\\oracle\\ora81\\database\\pwdora54.orapassword=qeventries=30*/

      UNIX:

      $orapwdfile=$ORACLE_HOME/dbs/orapwSID

      password=YourPassword

      entries=30

      然后重新启动Oracle服务(服务->OracleServiceHOSTNAME)。

      /*在执行上述命令之前,需要先将相应目录的pwdora8i.ora(或orapwSID)文件删除或者改名,因为口令字

      文件不能重名。*/

      [tkprof跟踪文件整理工具]

      $tkprofx.trcx.txt

      Windows2000/NT:

      d:\\oracle\\admin\\db_name\\udump\\*.trc

      UNIX:/u01/app/oracle/amdin/db_name/udump/*.trc//*/

      Oracle数据分区技术:8.0以后开始使用

      (一)LOB(LargeObject)大对象类型数据:

      1.BLOB:存储二进制数据,如图象、视频、声音等,用于代替Longraw类型(Oracle7.0以前的数据类型,今

      后不再支持)

      2.CLOB:存储大字符,如:个人简历,用于代替long字段。

      3.NCLOB:其它民族语言的支持

      (1)数据库字符集NLS:

      Server端:NLS_CHARACTERSET:(如果为以下的字符集,Oracle的数据库可以用来存储汉字)

      ZHS16GBK(Oraclei8,Oracle8)

      ZHS16CGB231280(Oracle7.3,8,8i)

      此参数位置在数据字典中,查询核心字符集(语言、日期、货币等):

      SQL>select*fromnls_database_parameters;

      Client端:NLS_LANG=SimplifiedChinese_CHINA.ZHS16GBK(如果没有设置,默认是英文)

      regedit.exe

      UNIXClient中:

      $NLS_LANG="simplifiedchinese"_china.zhs16gbk

      $exportNLS_LANG

      //一般将上述环境变量放入.profile文件中。

      /***********************************************插入内容

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

      (1)sys是一种用户,internal是一种方式,用来启动关闭数据库,9.0以后不再使用internal,全部是sys

      。

      (2)SQL>setcomv7//将8i版本暂时退回到7版

      (3)SQL>altersystemsuspend;//使用internal用户执行,冻结数据

      SQL>altersystemresume;//取消冻结,恢复正常

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

      ******************/

      (2)Oracle数据库核心字符集修改方法:

      [*]修改数据字典(使用SYS用户):

      SQL>updateprops$setvalue$='ZHS16GBK'wherename='NLS_CHARACTERSET';

      SQL>commit;

      然后重新启动数据库。

      4.BFILE:外部文件存储,将数据存储在服务器硬盘

      5、SQL关键字(命令)

      SQL关键字(以下命令为SQL命令,以分号结束)

      1.Alter:修改表结构

      2.Audit:审计,NoAudit(取消审计)

      3.Commit:数据提交,相反的命令:Rollback(回退)

      4.Comment:将oracle的注释写入数据字典

      5.Create:建表、数组、索引、视图等,相反的命令:Drop

      6.delete:删除表中的数据,Drop是把表中的数据包括结构全部删除

      7.Grant:授权,Revoke:收权(权限回收)

      8.Insert:在表中插入新行

      9.Lock:将表强行锁住

      10.Rename:修改表名

      11.Select:数据查询

      12.Update:数据更新,修改某一个列

      13.Validate:校验,对数据进行校验。

      6、SQL命令的输入:

      在SQL>提示符后输入命令,可以输入多行,以分号结束

      7、SQL*Plus关键字:以回车结束

      1.@:执行外部命令,格式:@路径\\文件名

      2.#:注释

      3./:执行上一条命令

      4.Accept:接收键盘输入的命令

      5.Append(简化为a):在行尾增加字符串

      SQL>at

      1*select*fromdept

      SQL>/

      6.Break:分组,Syntax:breakon分组列skipn//n为每两组之间间隔的空行

      /*例:

      SQL>breakonjob

      SQL>select*fromemporderbyjob;//此处务必按分组列排序

      SQL>breakonjobskip1

      SQL>/

      */

      7.Btitle,Ttitle:设置表尾、表头

      SQL>Ttitle'表头'

      SQL>Btitle'表尾'

      SQL>Ttitleoff//失效

      8.Change:写错了改正,Syntax:C/old/new

      /*例:

      SQL>select*fromdetp;

      select*fromdetp

      SQL>c/tp/pt

      1*select*fromdept

      SQL>/

      9.Clear:清除

      SQL>clearbreak//清除前面的break设置

      SQL>clearbuff//清除SQL*Plus缓冲区中的SQL语句

      10.Column:列定义,用于定义列的显示格式

      语法:SQL>column列名format格式

      例:SQL>Columnsalformat$99.999999

      11.computer:统计计算

      12.connect:从一个用户退出,直接进入另一个用户

      13.disconnect:中断当前用户的连接

      14.copy:远程复制(用的较少,一般数据链路)

      15.define:定义

      16.undefine:取消定义

      17.del:删除当前行

      18.describe(简写desc):显示表结构

      例:SQL>descemp

      19.document:文档注释

      20.edit(简化ed):调入外部编辑器编辑缓冲区中的SQL语句,保存后,可以直接通过“/”运行编辑过的SQL

      语句

      21.get:将外部文件调入不执行,只供显示

      例:SQL>getc:\\sqlplus.ora

      22.host:执行操作系统命令

      例:SQL>hostdir

      23.input(简化为I):行插入,在当前行的后面插入。

      24.List(简化为L):列示

      25.Pause:设置屏幕暂停

      SQL>setpauseon//暂停

      SQL>setpauseoff//不暂停

      SQL>set'more'pauseon[???]

      26.Quit:退出

      27.Remark:注释

      28.Run(R):类似“/”

      29.Save:将已经运行过的SQL命令保存到磁盘

      例:SQL>savec:\\run.sqlreplace//覆盖保存

      append//追加

      30.set:设置

      31.show:显示环境变量的值

      32.Spool:显示跟踪

      例:SQL>spoolc:\\文件名

      SQL>spooloff//停止记录

      33.Start:类似@,执行外部的SQL文件

      33.Timing:服务器端某一命令的执行时间跟踪

      数据字典:描述系统信息的表、视图、同义词等,由系统自动维护。

      例:SQL>select*fromtabs;

      1.显示当前所登录的用户:select*fromall_users;

      2.user_xxx:描述用户创建的对象,如:user_tables,user_views,user_indexes

      3.dba_XXX:数据库管理员(sys,system)专用数据字典

      4.all_XXX:描述用户创建的对象,其他用户授权可以存取的对象。

      all_objects:全部的数据字典

      1.查询全表的数据:

      SQL>select*fromemp;

      2.查询某(几)个列:SQL>selectename,salfromemp;

      3.DISTINCT标识:只显示不相同的列

      例:

      SQL>selectjobfromemp;//显示结果中有相同的记录

      SQL>selectdistinctjobfromemp;//只显示不相同的职业

      4.使用orderby将显示结果排序:ASC升序(默认),DESC降序

      5.使用where指出查询条件:

      SQL>select*fromempwheresal>2000;

      [字符型或日期型用单引号括起来,并区分大小写]

      6.设置日期显示格式:

      (1)确定日历格式:设置参数nls_calendar。

      SQL>altersessionsetnls_calendar='JapaneseImperial';//设置为日本日历

      SQL>altersessionsetnls_calendar='ROCofficial';//设置为台湾日历

      SQL>altersessionsetnls_calendar='Gregorian';//设置为格林尼治日历,这是我们要设置成的日历。

      SQL>selectsysdatefromdual;//查询系统时间

      (2)确定日期格式:参数nls_date_format

      常用的日期格式:

      yyyy.mm.dd

      yyyy-mm-dd

      yyyy/mm/dd

      yyyy"年"mm"月"dd"日"//如果要显示汉字,请用双引号括起来

      yyyy"年"mm"月"dd"日"dy//dy表示星期

      命令格式:

      SQL>altersessionsetnls_date_format='格式';

      [此命令只修改前端的显示,退出后即失效,要想永久有效,要修改注册表,在注册表中

      HKLM->Software->Oracle->Home0增加字符串关键字nls_date_format,键值为日期格式,此处的格式不需要

      用单引号括起来。]

      例:SQL>altersessionsetnls_date_format='yyyy"年"mm"月"dd"日"dy';

      7.Oracle登录自动执行文件glogin.sql:每次用户登录时自动执行该文件,可以将一些环境变量(如

      linesize)的设置命令或者其它命令放入该文件中。

      glogin.sql文件路径:

      Windows下:d:\\oracle\\ora81\\sqlplus\\admin\\glogin.sql

      UNIX:/u01/app/oracle/product/8.1.6/sqlplus/admin/glogin.sql

      二、运算符与谓词

      1、算术运算符:+,-,*,/

      SQL>selectsal,sal*12fromemp;//计算工资及年薪。

      SQL>selectsal,sal+commfromemp;//错误语句,因为comm中存在空值,会使运算结果也会出现空值。

      SQL>selectsal,sal+NVL(comm,0)fromemp;//正确语句,NVL为空值运算函数,当comm为空值时,

      该函数返回第二个值0。

      2、逻辑运算符:NOT,AND,OR,三个运算符的优先级别依次降低。

      3、比较运算符:>,<,=,>=,<=,!=

      4、谓词:

      (1)IN(或NOTIN):等于(不等于)列表中的任意值。

      SQL>select*fromempwherejobin('MANAGER','CLERK')

      (2)(NOT)BETWEENAND:表示从小到大的一个范围。[必须是从小到大]

      SQL>select*fromempwheresalnotbetween2000and3000;

      (3)LIKE:模式匹配

      SQL>select*fromempwhereenamelike'S%';//寻找ename为S打头的记录

      %:表示任意字符串

      _(下划线):表示一个任意字符

      SQL>select*fromempwhereenamelike'李%';//可以使用中文

      SQL>select*fromempwhereenamelike'S_I%';//寻找ename为S打头,第三个字母为I的记录

      SQL>selectobject_namefromall_objectswhereobject_namelike'DBA%';//搜索数据字典中与dba

      有关系的对象

      (4)(NOT)NULL(空值):

      SQL>select*fromempwherecommisNULL;//查询哪些人没有资金。

      5.伪列:

      (1)rowid:唯一行标识,行被删除之后,rowid不变。

      (2)rownum:行号,一行被删除之后,后面的行号会随之改变

      SQL>selectempno,ename,rowid,rownumfromemp;

      [查询SQL语句的相关数据字典]

      (1)SQL>selectsql_textfromv$sqlarea;//查询以前使用过的SQL语句

      (2)查询当前连接用户的SQL语句:

      SQL>selectuser_name,sql_textfromv$open_cursor;//需要用sys或system用户执行

      三、列名别名

      SQL>selectename,salasSalaryfromemp;

      SQL>selectename职工姓名,sal工资fromemp;

      *#/\\select都不允许做别名,如果一定要用,用双引号括起来。

      数据操纵语言(DML)

      一、数据插入:

      1.对于表中全部列插入

      语法:SQL>insertinto表名values(值表达式);

      例:SQL>Insertintodeptvalues(51,'软件开发部','北京');

      [*]用desc显示表结构、数据类型、顺序SQL>descdept//注意,不要将linesize设置的太大,否则看不

      到表结构,设置成100即可。

      [*]所插数据必须与目标列一致。

      [*]字符与日期数据使用单引号

      2.对于表中部分列插入

      语法:SQL>insertinto表名(列名1,列名2...)values(值表达式);

      [*]对于表中的非空列必须插入数据

      SQL>insertintoemp(empno,ename,job,hiredate,deptno)values(1234,'李大力','工程师',

      sysdate-30,10);

      /*sys或system用户访问其它用户的表的方法

      SQL>connectsystem/ab@ora44

      已连接。

      SQL>select*fromuser01.emp*/

      /********************commit及Rollback用法:下例是Rollback的一个例子。

      SQL>deletedeptwheredeptno=51;

      已删除1行。

      SQL>select*fromdept;

      SQL>rollback;

      SQL>select*fromdept;

      DEPTNODNAMELOC

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

      10ACCOUNTINGNEWYORK

      20RESEARCHDALLAS

      30SALESCHICAGO

      40OPERATIONSBOSTON

      50COMPUTERBEIJING

      51软件开发部北京

      已选择6行。

      *************************************************/

      3.使用参数(变量),临时输入值

      SQL>insertinto表名(列名1,列名2,...)values(&x1,&x2,...);

      SQL>insertdept(deptno,dname,loc)values(&x1,'&x2','&x3')

      SQL>insertintodeptvalues(&x1,'&x2','&x3');//在命令行中给字符或日期型参数加上单引号,则

      下面输入时不再需要输入单引号

      输入x1的值:53

      输入x2的值:dd

      输入x3的值:ee

      原值1:insertintodeptvalues(&x1,'&x2','&x3')

      新值1:insertintodeptvalues(53,'dd','ee')

      //definex=7788

      //也可以这样用:select&x1,&x2fromemp;

      4.使用子查询从另一个表中复制数据

      语法:Insertinto表名select子句;

      SQL>inserttoemp(empno,hiredate,deptno)

      selectdeptno+7300,sysdate,deptnofromdept;

      SQL>inserttoemp(empno,hiredate,deptno)

      selectdeptno+7300,sysdate,deptnofromdept@数据库链路名;//表示dept这个表在网络上的其它服务

      器中,注意:@之后不是连接串。

      SQL>createtablepayasselectename,salfromemp;//用复制的方法创建表

      SQL>insertintopayselect*frompay;//自己复制自己,可以使一个表飞速扩大。

      二、数据更新

      语法:SQL>Update表名set列名=值表达式where条件;

      例:

      SQL>updateempsetsal=sal+100wheresal<2000;

      SQL>updateempsetsal=5000,job='MANAGER'whereename='SMITH';

      SQL>updateempsetcomm=100wherecommisnull;

      三、数据删除

      语法:SQL>Deletefrom表名where条件;//删除数据保留结构,可以回退

      SQL>Truncatetable表名;//删除数据保留结构,不可以回退,效率高

      SQL>Droptable表名;//删除数据及结构,不可以回退

      数据控制语言(DCL)

      一、事务提交:对于数据的插入、更新、删除,只有提交后,数据才真正改变,在提交之前,只有修改了数

      据的用户才可以看到数据的改变,而其他用户看不到数据的改变。

      1.显式数据提交语法:SQL>commit;

      /*某一个用户对表进行更新等写操作之后,如果没有commit,那么其它用户不能对表进行更新操作,否则

      就会死掉。

      查锁方法:

      SQL>selectusername,sid,serial#fromv$session;

      解锁方法:

      SQL>altersystemkillsession'sid,serial#';

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

      *******/

      2.隐式数据提交:

      下列命令是隐式提交命令:

      Create,Alter,Drop,Connect,Disconnect,Grant,Revoke,Rename,Exit,Quit,Audit,NoAudit

      3.自动数据提交:

      SQL>setautocommiton//打开自动数据提交开关

      SQL>setautocommitoff//关闭自动数据提交开关(默认)

      二、事务回退

      语法:SQL>Rollback;//使数据库回退到最近一次提交后状态,如果一次也没有提交过,回到最原始状态

      SQL>Rollbac;

      SQL>Rollba;

      SQL>Rollb;

      SQL>Roll;

      //以上的用法都是正确的。

      三、设置保存点:

      SQL>SavePointa;

      回退到保存点:

      SQL>Rollbacktoa;//此处的Rollback不能再简写。

      数据定义语言(DDL)

      包括:创建基表、视图、同义词、索引、数据库链路、序列等

      一、创建基表

      语法:

      SQL>CreateTable表名(

      列名1数据类型,

      列名2数据类型,

      ...);//最多可以到1000个字段

      例:SQL>CreateTableproduct(

      p_name,varchar2(20),

      p_id_numbernumber(7),

      p_datedate);

      1.数据类型

      (1)字符型

      char(n):n<=2000,固定长度,如果实际长度不够,前面用空格补齐。

      varchar2(n):n<=4000,可变长度,不用空格补齐。

      (2)数字型number(n):整数,number(n,d):小数

      (3)日期型

      (4)二进制raw(8i以前的,现在不支持了)

      (5)大字符long:建议不要使用,现在不支持了

      (6)blob:存储二进制

      (7)CLOB:存储大字符

      SQL>Createtableemployee(

      namevarchar2(30),

      salarynumber(7,2),

      b_datedate,

      photeblob,

      resumeclob);

      [*]修改数据库兼容性参数(如果在执行上面的SQL语句时,提示clob字段“默认字符集具有不同的宽度”,

      则需要修改数据库兼容性。):

      D:\\oracle\\amdin\\db_name\\pfile\\init.ora

      compatible=8.0.5=改为=>8.1.0或8.1.5

      改完后重新启动数据库使修改生效。

      /**********************************************

      修改前:

      SQL>Createtableemployee(

      2namevarchar2(30),

      3salarynumber(7,2),

      4b_datedate,

      5photeblob,

      6resumeclob);

      resumeclob)

      *

      ERROR位于第6行:

      ORA-22866:默认字符集具有不同的宽度

      修改后:

      SQL>Createtableemployee(

      2namevarchar2(30),

      3salarynumber(7,2),

      4b_datedate,

      5photeblob,

      6resumeclob);

      表已创建。

      ************************************************/

      2.约束条件:数据完整性约束条件(DataIntegrityConstaints)

      Oracle常用约束条件:

      (1)非空约束:NOTNULL

      (2)唯一性约束:UNIQUE

      (3)主键:PRIMARYKEY,主键同时具有上面两个约束条件,一个表中只允许有一个主键。

      (4)外键:FOREIGNKEY,这一列值从其它表中取出,允许重复,但不允许修改。

      (5)检查:CHECK(e.g.check(sal>200)

      (6)引用(参考):REFERENCES,只能用其它表或者本表的某一列列值,不能随便修改。

      (7)缺省值:DEFAULT,如果没有输入,自动使用DEFAULT值。

      3.约束条件的定义方法:

      可以定义为列的一部分,也可以定义为表的一部分。

      (1)定义为列的一部分:

      SQL>CreateTableproduct(

      p_namevarchar2(20)unique,

      p_idnumber(7)primarykey,

      p_datedatenotnull);

      [*]Check、Default约束条件:

      SQL>Createtableemployee(

      namevarchar2(20),

      idnumber(7)primarykey,

      salnumber(11)check(sal>200andsal<2000),

      h_datedatedefaultsysdate);

      一个列具有多个约束条件的写法:

      SQL>CreateTableproduct(

      p_namevarchar2(20)unique,

      p_idnumber(7)primarykey,

      check(p_id>=111andp_id<=999),

      p_datedatenotnull);

      例:

      SQL>insertintoemployee(name,id,sal)values('Smith',2,201);

      SQL>select*fromemployee;

      (2)定义为表的一部分(不能用在Default和NotNUll的定义上):

      SQL>CreateTableProduct(

      p_namevarchar2(20),

      p_idnumber(7),

      p_datedatenotnull,

      constraintp_id_pkprimarykey(p_id),

      constraintp_name_ukunique(p_name));

      [*]查询约束条件:

      SQL>select*fromuser_constraintswheretable_name='PRODUCT';

      (3)另一种约束定义方法:

      SQL>CreateTableProduct(

      p_namevarchar2(20),

      p_idnumber(7)constraintpk_p_idprimarykey,

      p_datedateconstraintfk_p_datenotnull);

      4.使用外键创建主从基表

      (1)创建主表(定义主表):

      SQL>CreateTableproduct(

      p_namevarchar2(20),

      p_idnumber(7)primarykey,

      p_datedatenotnull);

      (2)创建子表,定义外键

      SQL>createtablesales_list(

      sales_namevarchar2(20),

      sales_idnumber(7)primarykey,

      p_idnumber(7),

      constraintp_id_fkforeignkey(p_id)referencesproduct(p_id));

      5.数据完整性约束条件的修改

      (1)删除约束条件:

      A.删除主键约束:

      SQL>Altertableproductdropprimarykey;

      SQL>Altertableproductdropconstraintp_id_pk;

      //以上两种方法等价

      B.删除唯一性约束:

      SQL>Altertableproductdropunique(p_name);

      SQL>Altertableproductdropconstraintp_id_uk;

      C.删除非空约束

      SQL>Altertableproductmodify(p_dateNULL);

      D.删除缺省值:

      SQL>Altertableproductmodify(p_datedefaultnull);

      (2)增加约束条件

      A.增加主键约束:

      SQL>Altertableproductaddprimarykey(p_id);

      SQL>Altertableproductaddconstraintp_id_pkprimarykey(p_id);

      B.增加非空约束

      SQL>altertableproductmodify(p_datenotnull);

      C.增加缺省值

      SQL>Altertableproductmodify(p_datedefaultsysdate-1);

      [*]查询缺省值:

      SQL>selecttable_name,column_name,data_defaultfromuser_tab_columns;

      二、修改表结构

      1.在表中增加新列:

      SQL>Altertableproductadd(p_listnumber(7),p_locvarchar2(20));

      2.删除一个列(只适用于Oracle8i以后的版本):

      SQL>Altertableproductdrop(p_list,p_loc);//删除多个列

      SQL>Altertableproductdropcolumnp_list;//删除一个列

      3.修改列宽:

      SQL>Altertableproductmodify(p_namevarchar2(40));

      //增加列宽没有约束,但减小列宽要求列中数据为空。使用此命令也可以修改列的数据类型。

      三、视图(View):视图是虚表。

      [*]视图不存储数据

      [*]数据来源于基表

      [*]不是数据的复制

      [*]在同一个表上可以创建多个视图

      1.创建视图的语法:

      SQL>CreateorReplaceview视图名

      asselect语句;

      例:SQL>createviewmanager

      as

      select*fromempwherejob='MANAGER';//select*fromtab;检查

      SQL>select*frommanager;//查询视图如果查询表

      //第二次创建视图,可以使用orreplace参数,不需要再删除而直接覆盖同名视图。

      SQL>createorreplaceviewmanager

      as

      select*fromempwherejob='MANAGER';

      [几点说明:]

      (1)在创建视图时,不得使用orderby排序。

      (2)在视图中插入数据,则数据被插入到基表中,所以,如果要向视图插入数据,则创建视图时,必须包含

      表中全部非空列。

      (3)用户视图数据字典:

      SQL>selectview_name,textfromuser_views;

      2.视图列别名:

      错误语句:

      SQL>createviewpaymentas

      selectsal,sal*12,nul(comm,0)/salfromemp;//错误原因:视图可以视同为表,所以列名也要符合

      规定,而sal*12则是不符合规矩的列名。

      正确语句:

      SQL>createviewpayment(c1,c2,c3)as//c1,c2,c3即为视图列别名

      selectsal,sal*12,nvl(comm,0)/salfromemp;

      3.创建视图时增加约束条件:WITHCHECKOPTION

      SQL>Createorreplaceviewdeptno20as

      selectempno,ename,deptnofromempwheredeptno=20;

      SQL>Insertintodeptno20values(1236,'李力',30);

      SQL>select*fromdeptno20;

      //上面的语句会出现能够通过视图入基表中插入数据,但却不能通过视图看到插入的数据的问题,解决办

      法:

      SQL>Createorreplaceviewdeptno20as

      selectempno,ename,deptnofromempwheredeptno=20

      WITHCHECKOPTION;

      4.创建Oracle8i的实体化视图(MaterializedView):视图不依赖于基表,基表被删除后,视图仍然正常。

      一般用于两个远程数据库之间的访问,通过数据链路来实现。

      (1)以DBA用户登录,为用户授予创建实体化视图的权限:

      SQL>GrantCreateMaterializedViewto用户名;

      (2)以获权用户登录,创建实体化视图:

      SQL>CreateMaterializedViewmanageras

      select*fromempwherejob='MANAGER';

      (3)删除实体化视图:

      SQL>DropMaterializedViewmanager;

      删除基表:

      SQL>droptable表名;

      删除视图:

      SQL>dropview视图名;

      三、创建数据库链路(Databaselink):

      数据库链路:用于数据库之间的远程数据复制。

      DB1(UNIX)<-------DB2(NT)

      若要将DB2中的数据复制到DB1,则需要在DB1中创建数据库链路指向DB2数据库。

      创建数据库链路的步骤:

      (1)创建好连接串。

      (2)创建数据库链路。

      1.创建数据库链路的语法:

      SQL>Createdatabaselink数据库链路名

      connectto用户名identifiedby口令

      using'主机字符串';

      [*]数据库链路名必须与远程数据库的全局数据库名(数据库名.域名,若没有数据库名,就是数据库名)相同

      [*]用户名及口令为远程数据库的用户名及口令

      [*]主机字符串为本机tnsnames.ora中网络连接串。

      SQL>Createdatabaselinkora31connecttouser30identifiedbyuser30using'ora31';

      2.使用数据库链路:

      SQL>select*fromproduct@ora31;

      SQL>insertintoproduct@ora31values(...);

      SQL>Createtableproductasselect*fromproduct@ora31;

      3.删除数据库链路:

      SQL>Dropdatabaselinkora31;

      (一)创建数据库触发器实现两个数据库之间实时数据传输。

      DB1(UNIX)<-------DB2(NT)

      若要将DB2中的数据复制到DB1,则需要在DB1中创建数据库链路指向DB2数据库。

      [*]在对方的数据库(DB2)上建立触发器,即数据发送方的数据库上建立触发器。

      [*]在数据发送方建立指向DB1的数据库链路。

      [操作步骤(假设db1为ora31,db2为ora8i):]

      (1)在DB1上建立用来复制远程数据的表:

      SQL>Createtableproduct

      asselect*fromproduct@ora31;

      (2)在DB2上建立到DB1的数据库链路:

      SQL>Createdatabaselinkora31connecttouser30identifiedbyuser30using'ora31';

      (3)在DB2上建立触发器:

      SQL>CreateorReplacetriggerinsert_productbeforeinsertonproduct

      foreachrow

      Begin

      Insertintoproduct@ora8i

      values(:new.p_id,:new.p_name);

      Endinsert_product;

      //上述创建数据库触发器的语句,请以.号结束,然后以/执行。

      /*查看SQL语句执行的错误信息:

      SQL>showerrors

      */

      (4)在DB2上测试数据的自动复制是否成功:

      SQL>Insertintoproductvalues(1005,'测试商品');//在db2的表中插入一条数据

      SQL>select*fromproduct;//检查数据是否正确插入本地表

      SQL>select*fromproduct@ora31;//检查数据是否复制到了db1的表中

      查询数据库链路信息:

      SQL>selectusername,passwordfromuser_db_links;

      数据更新:

      SQL>CreateorReplacetriggerupdate_product

      beforeupdateonproduct

      foreachrow

      Begin

      updateproduct@ora8i

      setp_id=:new.p_id,p_name=new.p_namewherep_id=:old.p_id

      Endupdate_product;

      数据删除:

      SQL>CreateorReplacetriggerdelete_product

      beforedeleteonproduct

      foreachrow

      Begin

      deletefromproduct@ora8iwherep_id=:old.pid

      Enddelete_product

      (二).创建快照(实体化视图)实现两个数据库之间定时数据库传输:

      快照:要求主副站点数据库的用户名相同

      (1)在主节点创建快照日志

      语法:SQL>Createsnapshotlogon主节点表名;//主节点基表必须含有主键

      (2)在副节点创建快照

      语法:

      SQL>Createsnapshot快照名

      refresh刷新方式

      next时间间隔

      withprimarykey

      forupdate

      asselect*from主节点表名@数据库链路名;

      [*]刷新方式:

      Compelete:完全刷新

      Force:强制刷新(建议使用,强制刷新自动先fast刷新,然后再force刷新)

      Fast:快速刷新

      [*]时间间隔:以天为单位。

      sysdate+1/4//六个小时刷新一次

      sysdate+1/1440//一分钟刷新一次

      SQL>showuser

      USER为"STUD29"

      SQL>createsnapshotlogondept;

      实体化视图日志已创建。

      SQL>showuser

      USER为"STUD29"

      SQL>select*fromdept;

      SQL>insertintodeptvalues(60,'testsnap','snapshot');

      [2]副节点

      SQL>connectsystem/ab

      已连接。

      SQL>createuserstud29identifiedbystud29;

      用户已创建

      SQL>grantconnect,resourcetostud29;

      授权成功。

      SQL>grantcreatesnapshottostud29;

      授权成功。

      SQL>connectstud29/stud29;

      已连接。

      SQL>connectsystem/ab

      已连接。

      SQL>grantcreatedatabaselinktostud29;

      授权成功。

      SQL>connectstud29/stud29

      已连接。

      SQL>createdatabaselinkora8iconnecttostud29identifiedbystud29using'tea';

      数据库链接已创建。

      SQL>createsnapshotdept

      实体化视图已创建。

      *******************************************************************************************/

      创建索引(indexes):

      语法:SQL>createindex索引名on表名(列名);

      例:SQL>createindexindex_dept_dnameondept(dname);

      索引数据字典:

      SQL>selectindex_name,table_owner,table_name,fromuser_indexes;

      五、创建序列(Sequences):

      语法:SQL>Createsequence序列名

      startwith起始编码

      incrementby步长

      maxvalue终止编码;

      SQL>createsequenceid_code

      startwith2

      incrementby2

      maxvalue999;

      序列使用方法:

      id_code.nextval//下一个值

      id_code.currval//当前值

      第一次要使用nextval,然后以后每次使用currval。

      insertintostudentvalues(id_code.nextval,'姓名');

      [*]||(双竖线)在oracle中是连接符号,将两个字符串连成一个,如:'A'||'B'='AB'

      数据库分区技术

      一、什么是数据分区?

      数据分区是指把一个表划分成若干小块。在创建表的结构时应考虑好分区方案,选择表中某一列或多列

      数据作为分区关键字,该关键字决定哪些数据分到哪些区。Oracle对分区进行管理,新插入数据自动存储到

      相应的分区。

      二、创建分区表:

      SQL>Createtableemployee(

      idnumber(7),

      namevarchar2(20),

      salnumber(7,2))

      Partitionbyrange(sal)

      (Partitionp1valueslessthan(500)tablespaceusers,

      Partitionp2valueslessthan(800)tablespacetools,

      partitionp3valueslessthan(1000)tablespacesystem);

      //p1,p2,p3是三个分区的名字,users,tools,system是三个表空间的名字。lessthan是小于(不包含

      )。

      几点说明:

      [.]所插数据不得大于LESSTHAN中的最大值

      [.]可以使用MAXVALUE(如上面的语句中,要求工资不能大于1000,如果出现这种情况,则应该改成下面的

      语句:

      SQL>Createtableemployee(

      idnumber(7),

      namevarchar2(20),

      salnumber(7,2))

      Partitionbyrange(sal)

      (Partitionp1valueslessthan(500)tablespaceusers,

      Partitionp2valueslessthan(800)tablespacetools,

      partitionp3valueslessthan(1000)tablespacesystem,

      partitionp4valueslessthen(maxvale)tablespaceusers);

      [.]不指定表空间时,则该区使用该用户的缺省表空间。

      *查询每个用户的用户缺省表空间:

      SQL>selectusername,default_tablespacefromdba_users;//使用dba用户查询

      [*]查询可以使用的表空间名字:

      SQL>selecttablespace_name,file_namefromdba_data_files;//使用dba(sys或system)来执行

      SQL>selectdba_users.username,dba_users.default_tablespace,dba_data_files.file_name

      fromdba_users,dba_data_files

      wheredba_users.default_tablespace=dba_data_files.tablespace_name;

      [temp表空间不能用于数据分区。]

      三、分区表的查询方法:

      SQL>select*fromemployee;//按没有分区的方法查询

      SQL>select*fromemployeepartition(p1);//只查询p1分区的数据。

      SQL>createtablepart3asselect*fromemployeepartition(p3);

      四、分区表的修改:

      1、增加分区:

      SQL>AltertableemployeeADD

      partitionp4valueslessthan(1500)tablespaceusers;

      [*]分区数据字典:

      SQL>selectpartition_name,high_value,tablespace_name

      fromuser_tab_partitions

      wheretable_name='EMPLOYEE';

      2、删除分区:

      SQL>AltertableemployeeDROPpartitionp4;//结构数据全部删除(相应分区及数据全部被删除)

      SQL>AltertableemployeeTRUNCATEpartitionp4;//保留结构(即区还存在),数据删除

      3、修改区名:

      SQL>AltertableemployeeRENAMEpartitionp4top5;

      4、分区数据移动:将分区数据从一个表空间移动到另一个表空间

      SQL>AltertableemployeeMOVEpartitionp4tablespacesystem;

      5、分区的拆分:

      SQL>AltertableemployeeSPLIT

      partitionp3at(900)

      into(partitionp31,partitionp32);

      /*关于数据字典的几点说明:

      v$打头的数据字典,后面不会以s结尾,例如:V$database,v$session;

      user打头的,后面都会以s结尾(复数),如:user_tab_partitions,user_tables

      dba打头的,有的以s结尾,有的不。

      ***************************************************************************/

      6、分区的合并:

      SQL>AltertableemployeeMERGEpartitionsp31,p32intopartitionp3;

      SQL*Plus报表功能

      /**********************插入内容:数据字典的一些说明*****************************

      (1)user_XXX:用户,例如:user_tables

      (2)dba_XXX:DBA专用

      (3)all_XXX:本用户建的,或者其它用户创建本用户可以查询的(需要其它用户的授权)

      (4)v$XXX:动态数据字典,如:v$database,v$instance,v$session,这些数据字典在oracle不启动时也

      能查询

      ***********************************************************************************/

      一、定义表头与表尾

      SQL>ttitle'表头'

      SQL>btitile'表尾'

      失效:SQL>ttitleoff

      SQL>btittleoff

      二、定义列名

      语法:SQL>column列名heading别名//别名不区分大小写

      三、定义列格式:

      SQL>column列名Format格式

      常用列格式:An:A为字符,n为最大字符宽度。

      $99.9999.99

      9.99eeee

      例:SQL>Columnsalformat$99.9999.99

      SQL>ColumncommlikeSal

      四、分组命令:

      语法:SQL>breakon列名skipn

      例:SQL>breakondeptnoskip2

      SQL>select*fromemporderbydeptno;

      五、统计计算:

      语法:SQL>compute函数of统计列onskipn//可以使用的函数有:sum,max,min,avg,count,var(

      斜方差),std(标准差)

      例:SQL>computesumofsalondeptno

      清除命令:SQL>clearcompute

      SQL>clearbreak

      SQL>clearcolumn

      增加报表级统计:

      SQL>breakondeptnoonREPORT

      SQL>computesumofsalonreport

      //整个报表出一个结果,上面两行都要运行,那么整个报表会根据你的设置出一个sumofsal的总计结果

      。

      函数

      一、日期格式转换函数:to_char(日期变量,'格式')//格式要用单引号括起来

      (1)日期格式构成方法:

      年月日时分秒

      yymmddhh(12小时制)miss

      yyyymondy(星期)hh24(24小时制)

      monthday

      A.yy.mm.dd,yy/mm/dd,yy-mm-dd,yyyy.mm.dd,...加中文也可以,中文要用又引号括起来

      SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')fromdual;//dual是一个虚拟表,任何用户

      都可以使用。

      二、聚组函数:从一组中返回汇总信息

      聚组函数有:Sum,count,countdistinct,max,min,avg,stddev(标准差)

      例:SQL>selectmin(sal),max(sal),avg(sal),sum(sal)formemp;

      SQL>selectename,job,salfromempwheresal=(slectmax(sal)fromemp);

      SQL>selectcount(*)fromemp;

      复杂查询

      一、连接查询:

      问:Smith在哪里工作?

      答:SQL>selectlocfromdept,empwhereename='SMITH'andemp.deptno=dept.deptno;

      二、集合查询[请参考PowerPiont教程:SQL讲稿.pptP29,30,31]

      集合操作是将多个基表的查询结果作UNION运算。

      交操作:Intersect

      差操作:MINUS

      三、子查询(Subqueries):

      子查询是在where子句中包含的查询语句,是由系列简单构成的复杂查询。

      问:谁与smith在同一部门工作?

      答:SQL>selectdeptnofromempwhereename='SMITH';

      SQL>selectenamefromempwheredeptno=20;

      将两个语句合起来:Selectenamefromempwheredeptno=(selectdeptnofromempwhereename=

      'SMITH');

      四、同义词(Synonym):

      1、创建私有同义词:

      语法:SQL>createsynonym同义词名for代替项;

      user01:

      SQL>grantselect,upateonproducttouser02;

      user02:

      SQL>Createsynonymproductforuser01.product;

      SQL>select*fromproduct;//这里的product即user01.product。

      同义词数据字典:

      SQL>selectsynonym_name,owner,table_namefromall_synonyms;

      SQL>selectsynonym_name,table_namefromuser_synonyms;

      2、DBA可以创建公共同义词(PublicSynonym):公共同义词全体用户可以存取

      语法:SQL>createpublicsynonym公共同义词名for代替项;

      SCOTT:

      SQL>grantselectonpaymenttopublic;

      SYSTEM:

      SQL>createpublicsynonympaymentforscott.payment;

      3.删除同义词:

      User:SQL>dropsynonym私有同义词名;

      DBA:SQL>droppublicsynonym公共同义词名;

      找Oracle视频教程学oracle,上课课家教育IT培训专家。

课课家教育

未登录