第02章语言基础-数据类型ddl dml sqlplus命令_第1页
第02章语言基础-数据类型ddl dml sqlplus命令_第2页
第02章语言基础-数据类型ddl dml sqlplus命令_第3页
第02章语言基础-数据类型ddl dml sqlplus命令_第4页
第02章语言基础-数据类型ddl dml sqlplus命令_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库操作与管理语言OracleSQL

SQL语言基础本章目标2.1、Oracle的数据类型、数据类型对比、区别。2.2、Oracle的DDL语句定义表结构、修改表结构、删除表。创建虚拟列、创建临时表。2.3、Oracle的DML语句插入数据、查询数据。2.4、Oracle的单表查询语句,投影、*、查询时as别名、查询时的where条件子句。排序、比较、and、or、in、not、like。distinct关键字介绍。2.5、修改数据、删除数据、截断表。2.6、sqlplus的基本命令。2.7、oracle的客户端软件、sqldeveloper等。2.8、DCL将在用户管理及表空间中讲。这儿不讲。Oracle

数据类型数据类型Oracle支持的数据类型包括支持ANSI的数据类型.AmericanNationalStandardsInstitute(ANSI——美国国家标准学会)见Oracle手册,ANSIOracleSqlType对照表Oracle内建的数据类型,即oracle自有数据类型数据类型数据类型是在设计表结构中需要定义的,选择适当的数据类型可以节省存储空间,提高运算效率。Oracle数据类型主要包括字符型适合保存字符串类型的数据,如姓名、地址、简介等等。如:char(2000),nchar(2000),varchar(4000),nvarchar2(4000),数据型数值型适合保存数值类型的数据,如年龄-int,收入numeric(p,s),decimal(p,s)同numeric(p,s)日期/时间型Date可以包含yyyy-mm-ddhh24:mi:ss–建议TIMESTAMP(精度即毫秒的个数)时间戳。大对象(LOB)型等rawLONG,clob,nclob。其中Clob和nclob最大数据为4G。Blob–保存二进制数据,最大4G.Bfile–保存一个指向外部文件的数据,最大为4G。可以在运行时通过I/O获取这个文件。字符型数据类型最大长度说明CHAR(size)2000固定长度字符串,size表示存储的字符数量NCHAR(size)2000固定长度的NLS(NationalLanguageSupport)字符串,size表示存储的字符数量经过试验最大值为1000。NVARCHAR2(size)4000可变长度的NLS字符串,size表示存储的字符数量.NationalLanguageSupport(NLS)

VARCHAR2(size)4000可变长度字符串,size表示存储的字符数量RAW(Size)2000可变长度二进制字符串,建议使用blob。数值型数据类型说明NUMBER(p,s)包含小数位的数值类型。参数p表示精度,参数s刻度,它表示小数点后面的位数。例如:NUMBER(10,2)表示小数点之前最多可以有8位数字,小数点后有2位数字NUMERIC(p,s)与NUMBER(p,s)相同FLOAT浮点数类型。属于近似数据类型,它并不存储为多数数字指定的精确值,它们只存储这些值的最近似值DEC(p,s)与NUMBER(p,s)相同DECIMAL(p,s)与NUMBER(p,s)相同INTEGER整数类型INT同INTEGERSMALLINT短整类型REAL实数类型,与FLOAT一样,属于近似数据类型DOUBLEPRECISION双精度类型日期/时间类型数据类型说明DATE日期类型TIMESTAMP与DATE数据类型相比,TIMESTAMP类型可以精确到微秒,微秒的精确范围为0-9,默认为6TIMESTAMPWITHTIMEZONE带时区偏移量的TIMESTAMP数据类型TIMESTAMPWITHLOCALTIMEZONE带时区偏移量的TIMESTAMP数据类型INTERVALYEARTOMONTH使用YEAR和MONTH日期时间字段存储一个时间段。年份精度指定表示年份的数字的位数。默认为2INTERVALDAYTOSECOND用于按照日、小时、分钟和秒来存储一个时段。日精度表示DAY字段的位数,默认为2;微秒的精度范围为0-9,默认为6大对象(LOB)类型数据类型说明BFILE指向服务器文件系统上的二进制文件的文件定位器,该二进制文件保存在数据库之外BLOB保存非结构化的二进制大对象数据,最大值为4G。CLOB保存单字节或多字节字符数据,最大值为4G.NCLOB保存Unicode编码字符数据,最大值为4G。Char与nchar--如果没有指定char的长度,则默认值为1createtablett(achar);desctt;--修改,最大值为2000altertablettmodifyachar(2000);--以下对比char与ncharpurgerecyclebin;createtablebb(achar(3),--按字节计算,最多只能保存一个汉字

bnchar(3)--按本地字符计算,可以保存3个汉字);insertintobbvalues('中','中国中');select*frombb;可以通过selectlength(a),lengthb(a)frombb;查看表的字符长度和字节长度对比char与varchar的区别:--以下是测试char,nchar,nvarchar,varchar的区别--先创建一个表,包含一列charcreatetablestud(achar(10));--修改表添加一列ncharaltertablestudaddbnchar(10);--添加一列nvarchar2altertablestudaddcnvarchar2(10);--添加一列为varchar2类型altertablestudadddvarchar2(10);--添加一列为字节码类型altertablestudadderaw(2000);--添加一列为长字节码类型,默认最大为2Galtertablestudaddflongraw;--分别写入字符,对于e,f写入后转换为unicode字节码insertintostudvalues('a','b','c','d','e','f');--查询这些记录select*fromstud;--查询它们所占用的长度,可见a,b占10个字节,c,d只占一个字节selectlength(a),length(b),length(c),length(d)fromstud;自定义数据类型--自定义一个数据类型createtypemytypeasobject(idint,namevarchar(30));--使用这个类型createtableone(idint,ttmytype);--写入自定义类型数据insertintoonevalues(1,mytype(1,'Jack'));--通过游标读取自定义类型的值declareccmytype;cursorcurisselectttfromone;beginopencur;loopfetchcurintocc;exitwhencur%notfound;--输出信息

dbms_output.put_line();endloop;closecur;end;SQL语句类型SQL语句类型数据定义语言DDL(DataDefinitionLanguage)用于创建对象如:createtable,altertable,droptable,createview;数据操纵语言DML(DataManipulationLanguage)用于操作数据CRUD。如:insertinto,update,delete,select数据控制语言DCL(DataControlLanguage)用于访问权限的控制如revoke,grant,commit,rollbackDDL语句DDL是指数据定义语言CreateDropAlterModifyRename创建表及命名规则表名和列名:必须以字母开头必须在1–30个字符之间必须只能包含A–Z,a–z,0–9,_,$,和#必须不能和用户定义的其他对象重名必须不能是Oracle的保留字Oracle默认存储是都存为大写必须具备:CREATETABLE权限存储空间必须指定:表名列名,数据类型,数据类型的大小创建表语法CREATE[GLOBALTEMPORARY]TABLEtable_name(

column_name

type[CONSTRAINTconstraint_defDEFAULTdefault_exp][,column_name

type[CONSTRAINTconstraint_defDEFAULTdefault_exp]...])[ONCOMMIT{DELETE|PRESERVE}ROWS]TABLESPACEtab_space;说明GLOBALTEMPORARY:表示表中的数据行是临时的,表中的数据行保存到什么时候,需要参考OMCOMMIT选项table_name:指定表名column_name:列名type:列的类型constraint_def:列的约束default_exp:指定列的默认值ONCOMMIT:控制临时表中数据行保存的时间。DELETE表示事务结束则表中的数据行被删除。PRESERVE表示表中的数据一直保存到用户会话结束。如果省略OMCOMMIT后面的参数,则默认为DELETEtab_space:指定表存放的表空间。如果没有指定的话,则存放在当前用户的默认表空间案例-1创建表CREATETABLEorder_status2(idINTEGERCONSTRAINTorder_status2_pkPRIMARYKEY,statusVARCHAR2(10),last_modifiedDATEDEFAULTSYSDATE);案例-2例如CREATEGLOBALTEMPORARYTABLEorder_status_temp(idINTEGER,statusVARCHAR2(10),last_modifiedDATEDEFAULTSYSDATE)ONCOMMITPRESERVEROWS;插入数据INSERTINTOorder_status_temp(id,status)VALUES(1,'New');说明创建临时表order_status_temp,表中的数据将会保存到直到用户结束会话,表中的数据将会被清除插入数据成功之后,进行查询;断开会话,重新登录进行查询获取表的相关信息使用DESCRIBE命令查看某张表的信息查询USER_TABLES视图获取表的相关信息案例例如SELECTtable_name,tablespace_name,temporaryFROMuser_tables;注意:由于ORDER_STATUS_TEMP表是临时表,在最后一列使用Y表示table_name:表示表名tablespace_name:该表存储的表空间的名称。表空间是​​数据库用来存储对象的区域,如表。temporary:表示该表是否是临时的,Y表示是临时表,否则为N获取表中列的信息可以通过查看user_tab_columns视图,查看表的列相关信息,例如SELECTtable_name,column_name,data_type,data_length,data_precision,data_scaleFROMuser_tab_columns;user_tab_columns字段说明user_tab_columns视图中的某些列table_name表名column_name列名data_type列的数据类型data_length数据长度data_precision数字列的精度data_scale小数点后位数增加列给order_status2表增加一列ALTERTABLEorder_status2ADDmodified_byINTEGER;给order_status2表增加一列,指定默认值ALTERTABLEorder_status2ADDinitially_createdDATEDEFAULTSYSDATENOTNULL;使用DESCRIBE命令验证添加结果DESCRIBEorder_status2;显示效果如下图所示:增加虚拟列-1Oracle11g允许添加虚拟列,虚拟列可以引用表中已存在的列。虚拟列不可以添加到临时表上。例如,现有表salary_grades,并有如下数据CREATETABLEsalary_grades(salary_grade_idINTEGERCONSTRAINTsalary_grade_pkPRIMARYKEY,low_salaryNUMBER(6,0),high_salaryNUMBER(6,0));INSERTINTOsalary_gradesVALUES(1,1,250000);INSERTINTOsalary_gradesVALUES(2,250001,500000);INSERTINTOsalary_gradesVALUES(3,500001,750000);INSERTINTOsalary_gradesVALUES(4,750001,999999);增加虚拟列-2给表salary_grades添加虚拟列ALTERTABLEsalary_gradesADD(average_salaryAS((low_salary+high_salary)/2));查看表结构及表中数据DESCCRIBEsalary_grades;SELECT*FROMsalary_grades;修改列修改列的大小ALTERTABLEorder_status2MODIFYstatusVARCHAR2(15);修改数字列精度ALTERTABLEorder_status2MODIFYidNUMBER(5);修改数据类型ALTERTABLEorder_status2MODIFYstatusCHAR(15);修改默认值ALTERTABLEorder_status2MODIFYlast_modifiedDEFAULTSYSDATE-1;给列重命名语法ALTERTABLE<table_name>RENAMECOLUMN<old_col_name>TO<new_col_name>例如修改order_status2表的last_modified列名为modified列ALTERTABLEorder_status2RENAMECOLUMNlast_modifiedTOmodified;执行效果图如下表所示:删除列使用ALTERTABLE进行列的删除,如下ALTERTABLEorder_status2DROPCOLUMNinitially_created;重新命名表名可以使用RENAME语句对表进行重命名例如RENAMEorder_status2TOorder_state;运行效果图如下所示:重新将表名恢复RENAMEorder_stateTOorder_status2;不建议修改表名操作。给表添加备注给表或列添加备注,可以帮助用户理解表或列的作用。给表或列添加备注可以使用COMMENT语句例如,给表添加备注COMMENTONTABLEorder_status2IS'存储订单状态信息';例如,给列条件备注COMMENTONCOLUMNorder_status2.last_modifiedIS'存储订单最后修改时间';查看表备注查看表的备注可以从ments视图中查看表的备注信息SELECT*FROMments;查询效果如下图所示:查看列备注查看列的备注可以从ments视图中查看列的备注信息SELECT*FROMmentsWHEREtable_name='ORDER_STATUS2';查询效果如下图所示:从已有数据创建表:createtablestud3asselect*fromstud2;请考虑:复制一部分数据。只复制表结构。删除表如果要删除表的话,可以使用DROPTABLE语句例如,删除order_status2表DROPTABLEorder_status2;DROPTABLEorder_status2[purge];直接删除,不去回收站操作效果如下图所示:小结创建表创建临时表添加新列删除列修改列的数据类型添加虚拟列DML语句

本章目标插入数据更新数据删除数据查询INSERT语句-1可以使用INSERT语句将数据插入到表中,需要指定以下信息插入到哪张表指定插入哪些列指定列清单对应的一系列列值当插入数据时,需要给主键以及非空约束的列指定值。可以为NULL值的列可以不指定值。例如,可以使用DESCRIBE命令查看列的情况DESCRIBEcustomers查询效果如下图所示:INSERT语句-2例如,使用INSERT语句往customers表中插入数据,指定相关列和值INSERTINTOcustomers(customer_id,first_name,last_name,dob,phone)VALUES(6,'Fred','Brown','01-1月-1970','');查询customers表,查看结果集省略列清单如果为表所有列都指定值,那么可以忽略列清单例如,为customers表插入一条记录INSERTINTOcustomersVALUES(7,'Jane','Green','01-1月-1970','');执行结果如下图所示:说明如果省略列清单的话,那么值的指定顺序必须与DESCRIBE命令看到的列清单的顺序保持一致。为列指定NULL值可以使用NULL为某些列指定空值例如,往customers表中插入记录,为dob和phone指定NULL值INSERTINTOcustomersVALUES(8,'Sophie','White',NULL,NULL);再将customer_id为8的用户查询出来SELECT*FROMcustomersWHEREcustomer_id=8;执行效果如下图所示:值包含单引号和双引号列值中可以包含单引号或双引号例如,往customers表中插入last_name包含单引号的O‘MalleyINSERTINTOcustomersVALUES(9,'Kyle','O''Malley',NULL,NULL);插入产品名包含双引号的:The"Great"GatsbyINSERTINTOproducts(product_id,product_type_id,name,description,price)VALUES(13,1,'The"Great"Gatsby',NULL,12.99);执行效果如右图所示:将行从一个表复制到另一个表可以使用INSERT语句将从一个表查询出来的行插入到另外一张表。源表的列的数量和列类型必须和目标表必须相符。例如,将customers表中的1号用户查询出来,然后插入到customers表中,并为其指定customer_id为10INSERTINTOcustomers(customer_id,first_name,last_name)SELECT10,first_name,last_nameFROMcustomersWHEREcustomer_id=1;执行效果如下图所示:使用UPDATE修改表-1可以使用UPDATE修改表中的行。当使用UPDATE时,需要指定以下信息表名需要修改的列需要用WHERE子句指定条件列名的清单及新值例如更新customers表中customer_id为2的客户last_nameUPDATEcustomersSETlast_name='Orange'WHEREcustomer_id=2;查询结果如下图所示:使用UPDATE修改表-2在一个UPDATE语句中可以修改多列例如,将products表中商品价格大于等于20的提高20%,并将商品名全部转化为小写UPDATEproductsSETprice=price*1.20,name=LOWER(name)WHEREprice>=20;执行效果如下图所示:使用DELETE语句删除行可以使用DELETE语句从表中删除行。需要使用WHERE子句指定需要删除的行,否则所有行都会被删除例如,删除customers表中customer_id为10的客户DELETEFROMcustomersWHEREcustomer_id=10;TRUNCATETABLE截断表使用TRUNCATE语句这个操作会从表中删除所有的行和重置表的存储区域。例如,截断order_status2表TRUNCATETABLEorder_status2;操作效果如下图所示:说明如果要删除表中所有的数据使用TRUNCATE比DELETE效果要好。因为TRUNCATE会为新的数据行重置存储区域,而且它删除时不需要占用数据库撤销空间,也不需要使用COMMIT进行提交。是直接删除。你可以使用delete与truncate与rollback测试一下。小结插入数据更新数据删除数据截断表数据DML之Select语句:

SELECT:投影*查询所有列查询时as别名查询时的where排序比较>=,<=,=,is,isnotand、or、in、not、likedistinct关键字介绍在select中使用聚集函数SELECT语句SELECT语句的基本语法SELECT子句FROM子句[WHERE子句]说明SELECT子句:指定查询结果集的列的组成,列表中的列可以来自一个或多个表或视图FROM子句:指定要查询的一个或多个表或视图WHERE子句:指定查询的条件相关说明在本课程中,关键字、子句和语句定义如下:关键字是指单个的SQL元素。例如,SELECT和FROM都是关键字子句是SQL语句的一部分。例如,SELECTemployee_id,last_name,…就是一个子句语句是两个或更多个子句的组合。例如,SELECT*FROMemployees就是一个SQL语句选择所有的列选择所有的列可以在SELECT关键字后加星号(*),也可以列出所有的列例如SELECT*FROMemployees;查询效果如下图所示:选择特定的列投影:可以在SELECT语句中指定列名,使用逗号隔开,这样可以指定表显示某些列,也可以调整列的先后显示顺序例如SELECTemployee_id,last_nameFROMemployees;查询结果如下图所示:编写SQL语句为了构建易读易编的有效语句,其规则和准则如下:SQL语句是不区分大小写的SQL语句可以是一行,也可以是多行关键字不能在两行之间一分为二或缩写子句通常放在单独的行中,这样可以增强可读性并且易于编辑使用缩进是为了增强可读性关键字通常使用大写字母输入;所有其它文字都是使用小写输入的算术表达式在Select中的运用:使用算术运算符,可以创建数字和日期数据表达式。算术表达式可以包含列名、常数值和算术运算符运算符说明+加-减*乘/除使用算术运算符例如SELECTemployee_id,last_name,salary,salary+500FROMemployees;查询效果如下图所示:说明计算产生的salary+500列并不是employees表的新列,它只是用于标记而已在默认情况下,输出显示的新列名称来源于生成该列的计算公式运算符优先顺序*/+-乘和除的运算优先级高于加和减优先级相同的运算符是从左到右进行运算的可以使用小括号来强制语句做出优先运算,并使语句运算顺序更为清晰运算符优先顺序例如SELECTemployee_id,last_name,salary,salary/12+100FROMemployees;查询效果如下图所示:使用括号例如SELECTemployee_id,last_name,salary,(salary)/12FROMemployees;查询效果如下图所示:连接运算符连接运算符具有以下特定和功能将列或字符串连接到其他列由两条竖线表示(||)或concat(arg1,arg2)创建一个合成列,它是字符串表达式使用连接运算符例如SELECTlast_name||titleAS"Employees"FROMemployees;查询效果如下图所示:文字字符串文字是指包含在SELECT列表中的字符、数字或日期日期和字符文字必须值必须包含在单引号中在输出结果中,每个返回的行都会将每个字符串显示一次使用文字字符串-1例如SELECTlast_name||'isa'||titleAS"EmployeesDetails"FROMemployees;查询效果如下图所示:使用文字字符串-2例如SELECTlast_name||':1Yearsalary='||salaryAS"EmployeesSalary"FROMemployees;查询效果如下图所示:限制选定的行使用WHERE子句限制返回的行语法SELECT*|{[DISTINCT]column|express[alias],…}FROMtableWHEREcondition(s);说明WHERE子句在FORM后面,将查询对象限制在满足一定条件的行condition(s):由列名、表达式、常数和比较运算符组成WHERE子句可以比较列、文字值、算术表达式或函数的值。它包含三个元素:列名比较条件列名、常数或值列表Where子句中的and\or\in\notin\between\like关键字的使用As别名:SQL>selectidas编号,name姓名fromstud;

编号姓名

2李四

1张三as关键字可以省略使用WHERE子句例如,查询employee_id为4的员工SELECT*FROMEMPLOYEESWHEREemployee_id=4;查询效果如下所示:字符串和日期字符串和日期包含在单引号中WHERE子句中的字符串和日期必须包含在单引号中。但是数字常数不能包含在单引号中字符值是区分大小写的默认日期格式为DD-MON-RROracle数据库以内部数字格式存储日期,包括世纪、年、月、日、小时、分钟和秒日期筛选例如SELECT*FROMcustomersWHEREDOB>'1-1月-68';查询效果如下图所示:条件表达式及like:WHERE子句使用运算符对值进行比较,主要的运算符有以下几种A=B:表示A与B的值相等,则为TRUEA>B:表示A的值大于B的值,则为TRUEA<B:表示A的值小于B的值,则为TRUEA!=B或A<>B:表示A的值不等于B的值,则为TRUEALIKEB:其中LIKE是匹配运算符。在这种条件判断中,若A的值匹配B的值,则该判断条件为TRUE,在LIKE表达式中可以使用通配符,Oracle可使用的通配符及含义如下%:包含零个或多个任意字符的字符串_:任意单个字符案例要查询employees表中所有的first_name以“S”开头的雇员SELECTemployee_id,first_name,last_nameFROMemployeesWHEREfirst_nameLIKE'S%';查询结果如下图所示:in和notinSQL>select*fromstudwhereidin(1,2);IDNAME

2李四

1张三in与or可以互相转换Between:在…之间..SQL>select*fromstudwhereidbetween1and2;IDNAME

2李四

1张三ExistsSQL>select*fromstudwhereexists(select*fromstud);IDNAME

2李四

1张三这儿用到了子查询,将在后面讲。在select中直接使用参数&arg:SQL>select*fromstudwhereid=&id;输入id的值:1原值1:select*fromstudwhereid=&id新值1:select*fromstudwhereid=1IDNAME

1张三SQL>select*fromstudwherename='&nm';输入nm的值:张三原值1:select*fromstudwherename='&nm'新值1:select*fromstudwherename='张三'IDNAME

1张三小结数据类型SQL语句类型介绍SELECT基础事务:事务的特点ACID:原子性(atomicity):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。一致性(consistency):在事务处理执行前后,数据库是一致的(数据库数据完整性约束)。隔离性(isolcation):一个事务处理对另一个事务处理的影响。持续性(durability):事务处理的效果能够被永久保存下来。一个事务只会有一个结果:要么成功、要么失败。Oracle中的事务:事务的开始DML语句的执行即开始一个事务。以下情况之一为事务的结束:显式的结束:执行了commit或是rollback;隐式的提交:执行了DDL,DCL语句,或是exit退出。隐式的回滚:系统异常关闭,死机,掉电。控制事务保存点B保存点ADELETEINSERTUPDATEINSERTCOMMITTime

事务ROLLBACKtoSAVEPOINTBROLLBACKtoSAVEPOINTAROLLBACKSavepoint保存点:UPDATE...SAVEPOINTupdate_done;Savepointcreated.INSERT...ROLLBACKTOupdate_done;Rollbackcomplete.回滚到保留点使用SAVEPOINT

语句在当前事务中创建保存点。使用ROLLBACKTO

SAVEPOINT

语句回滚到创建的保存点。提交或回滚前的数据状态改变前的数据状态是可以恢复的执行DML操作的用户可以通过SELECT

语句查询之前的修正其他用户不能看到当前用户所做的改变,直到当前用户结束事务。DML语句所涉及到的行被锁定,其他用户不能操作。提交后的数据状态数据的改变已经被保存到数据库中。改变前的数据已经丢失。所有用户可以看到结果。锁被释放,其他用户可以操作涉及到的数据。所有保存点被释放。对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:脏读:对于两个事物T1,T2,T1读取了已经被T2更新但还没有被提交的字段.之后,若T2回滚,T1读取的内容就是临时且无效的.不可重复读:对于两个事物T1,T2,T1读取了一个字段,然后T2

更新了该字段.之后,T1再次读取同一个字段,值就不同了.幻读:对于两个事物T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行.之后,如果T1再次读取同一个表,就会多出几行.数据库事务的隔离性:数据库系统必须具有隔离并发运行各个事务的能力,使它们不会相互影响,避免各种并发问题.一个事务与其他事务隔离的程度称为隔离级别.数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越弱Oracle中事务的隔离级别:数据库的隔离级别数据库提供的4种事务隔离级别:Oracle支持的2种事务隔离级别:READCOMMITED,SERIALIZABLE.Oracle默认的事务隔离级别为:READCOMMITEDOracle同时提供了一个Readonly的隔离级别。Mysql支持4中事务隔离级别.Mysql默认的事务隔离级别为:REPEATABLEREAD总结功能插入修正删除提交保存点回滚语句INSERTUPDATEDELETE COMMITSAVEPOINTROLLBACK通过本章学习,您应学会如何使用DML语句改变数据和事务控制Sqlplus基本命令基本命令:SQL>Showuser;显示当前登录的用户SQL>showall;查看所有(68个)系统设置(变量)的值。Setheadingoff;禁止显示列标题基本命令:Setfeedbackoff;设置是否在最后一行,回显行数信息。基本命令:Settimingon;默认为off,设置显示查询耗时。setsqlprompt"SQL>"--设置默认提示符,默认值就是"SQL>"

setlinesize1000--设置屏幕显示行宽,默认80

设置好以后,应该再调整命令行的宽度才可以。setmitON--设置是否自动提交,默认为OFF;setpauseon--默认为OFF,设置暂停,会使屏幕显示停止,等待按下ENTER键,再显示下一页

setarraysize1--默认为15

与性能有关。ArraysizespecifieshowmanyrowsSQL*Pluswillfetchinacall.Thenumberncanbebetween1and5000.arraysize定义了一次返回到客户端的行数,当扫描了arraysize

行后,停止扫描,返回数据,然后继续扫描。

这个过程就是统计信息中的SQL*Net

roundtrips

to/from

client。因为arraysize

默认是15行,那么就有一个问题,因为我们一个block

中的记录数一般都会超过15行,所以如果按照15行扫描一次,那么每次扫描要多扫描一个数据块,一个数据块也可能就会重复扫描多次。永久保存arraysize

参数:

可以该参数保存到glogin.sql

或者login.sql

文件里,这样可以永久生效,不必每次都去set

指定。伪表dual–selectsysdatefromdual;设置时间和日期格式SQL>selectsysdatefromdual;SYSDATE2013-03-11SQL>altersessionsetNLS_date_format='yyyy-mm-ddhh24:mi:ss';Sessionaltered.SQL>selectsysdatefromdual;SYSDATE2013-03-1100:02:07SQLplus基本命令:SQL>clearscreen;清空屏幕SQL>hostcls;清空屏幕SQL>spoolc:\some.sql–将以下执行的sql语句保存到some.sql文件中。SQL>spooloff;关闭,将数据写出到some.sql中。编辑命令命令说明A[PPEND]text在SQL行的末尾添加文本C[HANGE]/old/new将当前行中的old替换成newC[HANGE]/text从当前行删除textCL[EAR]BUF[FER]删除缓冲区所有的SQLDEL删除刚才执行的SQLI[NPUT]text在当前行后面添加一新行,内容是textL[IST]列出刚才执行的sqlappendSQL>--先执行一句sqlSQL>select*fromjobs;SQL>--然后在这行后添加一个条件SQL>appendwheremin_salary>4000;changeSQL>select*fromjobswheremin_salary>400;SQL>--将4000换成6000SQL>change/4000/6000;--注意前面的/Clearbuffer默认情况下,oracle将所有的执行的命令,保存到缓存中。可以通过clearbuffer删除缓存中的Sql。可以通过/执行上一次执行过的sql.保存命令在SQL*Plus中,可以将一个或多个SQL命令、PL/SQL块和SQL*Plus命令存储在命令文件中,其命令包括SAVE命令、INPUT命令、EDIT命令3种SAVE命令格式:SAVEfilename使用SAVE命令可以直接将缓冲区中的SQL语句保存到在当前路径或指定路径下指定的文件中,扩展名是.sql。可以使用saved:\a\a.sqlreplace覆盖已经存在的文件。INPUT命令可以将INPUT和SAVE命令结合使用,使用INPUT命令将SQL*Plus命令输入到缓冲区中,然后可以使用SAVE命令保存到文件中。通过input可以将sql语句写入到缓存中,可以通过list列出所有在缓存中的数据。通过del*删除缓存中的所有数据,等同于clearbuffer.EDIT命令可以直接使用EDIT命令创建文件加入注释在代码中加入注释能够提高可读性,在SQL*Plus中加入注释的方式包括REMARK命令、/*...*/、--三种使用REMARK命令使用REMARK命令在一个命令文件的一行上加上注释例如:REMARK这是注释内容使用SQL注释分隔符/*...*/可以对一个命令文件的一行或多行加注释使用--使用ANSI/ISO样式注释,对单行进行注释例如:--清除屏幕CLEARSCREEN运行命令-1运行SQL命令和PL/SQL块有三种方式,分别为命令行方式、SQL缓冲区方式、命令文件方式命令行方式在命令后面加分号(;)作为终止符来运行SQL命令的方式SQL缓冲区方式SQL*Plus提供了RUN命令和斜杠(/)命令来以缓冲区方式执行SQL命令。RUN命令格式:R[un]。RUN命令列出并执行当前存储在缓冲区的命令并返回查询的结果,并使缓冲区中的最后一行成为当前行。斜杠(/)命令类似于RUN命令,它执行存储在缓冲区中的SQL命令或PL/SQL块,但不显示缓冲区的内容,也不会使缓冲区的最后一行成为当前行。运行命令-2命令文件方式以命令文件方式运行一个SQL命令或SQL*Plus命令或PL/SQL块,有两种方式:START命令和@命令

START命令语法:STARTfilename[.sql][arg1arg2]SQL*Plus在当前路径下查找具有在START命令中指定的文件名和扩展名的文件。如果没有找到,将在SQLPATH环境变量定义的目录中查找。参数部分[arg1arg2]代表@命令与START命令的功能相似,唯一的区别是@命令既可以在SQL*Plus会话内部运行,又可以在启动SQL*Plus时的命令行级别运行,而START命令只能在SQL*Plus会话命令内部执行。Start命令与@命令:SQL>clearbuffer–先清空缓冲区的所有数据bufferclearedSQL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论