Oracle_Plsql个人学习笔记总结
- 格式:docx
- 大小:175.61 KB
- 文档页数:15
PLSQL循序渐进全面学习教程(全)PL/SQL是用于Oracle数据库的编程语言,它结合了SQL语句的数据操作能力和一般编程语言的逻辑控制能力。
PL/SQL循序渐进的全面学习教程将帮助你逐步学习和掌握PL/SQL的各个方面。
1.简介和基础知识:-PL/SQL的概念和背景-PL/SQL的开发工具和环境-PL/SQL和SQL的关系-PL/SQL的基本语法和数据类型2.变量和常量:-PL/SQL变量的声明和使用-不同类型的变量和数据类型-常量的定义和使用3.控制结构:-IF-THEN语句和IF-THEN-ELSE语句-CASE语句的使用-循环语句(FOR循环、WHILE循环)4.异常处理:-异常的概念和分类-异常处理的方法和语句-自定义异常和错误处理5.子程序和函数:-PL/SQL子程序和函数的概念和用途-创建和调用子程序和函数-参数传递和返回值6.游标和结果集:-游标的概念和使用场景-游标的声明、打开、关闭和绑定-使用游标处理结果集和数据集7.触发器:-触发器的概念和作用-创建和使用触发器-触发器的触发事件和触发时机8.包和包体:-包和包体的定义和特点-创建和使用包和包体-包的封装和共享9.过程和函数:-过程和函数的概念和区别-创建和使用过程和函数-过程和函数的编写和调用10.使用PL/SQL开发应用程序:-使用PL/SQL编写数据库操作代码-使用PL/SQL开发业务逻辑-PL/SQL和其他编程语言的集成以上是PL/SQL循序渐进全面学习教程的大纲,你可以根据自己的学习进度逐步深入学习每个主题。
希望这个教程对你学习和掌握PL/SQL编程语言有所帮助!。
plsql使用技巧详解1.记住登陆密码?为了工作方便希望PL/SQL?Developer记住登录Oracle的用户名和密码;设置方法:PL/SQL?Developer?7.1.2?->tools->Preferences->Oracle->Logon?History?,?“Store?history”是默认勾选的,勾上“Store?with?password”?即可,重新登录在输入一次密码则记住了;?2.登录后默认自动选中My?Objects?默认情况下,PLSQL?Developer登录后,Brower里会选择All?objects,如果你登录的用户是dba,要展开tables目录,正常情况都需要Wait几秒钟,而选择My?Objects后响应速率则是以毫秒计算的。
?设置方法:?Tools菜单?-->?Brower?Filters,会打开Brower?Folders的定单窗口,把“My?Objects”设为默认即可。
?Tools菜单--Brower?Folders,中把你经常点的几个目录(比如:Tables?Views?Seq?Functions?Procedures)移得靠上一点,并加上颜色区分,这样你的平均寻表时间会大大缩短。
?3.类SQL?PLUS窗口?File->New?->Command?Window?这个类似于oracle的客户端工具sql?plus,但用比它好用多了;?4.关键字自动大写?Tools->Preferences->Editor,将Keyword?case选择Uppercase。
这样在窗口中输入sql语句时,关键字会自动大写,而其它都是小写。
这样阅读代码比较容易,且保持良好得编码风格,同理,在Tools->Preferences->Code?Assistant里可以设置数据库对象的大写、小写,首字母大写等。
plsql用法,操作介绍PL/SQL是Oracle数据库中一种重要的编程语言,它提供了强大的数据处理和数据库操作能力。
本文将向大家介绍PL/SQL的用法和操作。
一、PL/SQL基础PL/SQL是一种过程化的编程语言,它可以在Oracle数据库中执行存储过程、函数、触发器和包等对象。
这些对象可以由用户自定义,并在数据库中存储,以供其他用户调用。
PL/SQL提供了丰富的数据类型、控制结构、函数和过程,使得开发者可以方便地编写复杂的数据库操作程序。
二、PL/SQL语法1. 声明语句:在PL/SQL中,需要先声明变量和常量,常见的声明语句有:变量声明(如:变量类型数据类型;),常量声明(如:CONST 常量名数据类型 = 值)。
2. 条件语句:PL/SQL支持多种条件语句,如IF-THEN-ELSE,CASE表达式等。
3. 循环语句:PL/SQL支持FOR循环、WHILE循环和LOOP循环等。
4. 异常处理:PL/SQL提供了异常处理机制,可以捕获和处理运行时出现的错误。
5. 函数和过程:PL/SQL支持定义函数和过程,可以对数据进行操作并返回结果。
三、PL/SQL操作1. 创建存储过程:可以使用CREATE PROCEDURE语句创建存储过程,指定过程的名称、参数和执行逻辑。
2. 调用存储过程:可以使用CALL语句调用存储过程,并传递参数。
3. 创建函数:可以使用CREATE FUNCTION语句创建函数,指定函数的名称、参数和返回值类型。
4. 调用函数:可以使用直接调用函数的方式或通过存储过程调用函数。
5. 创建触发器:可以使用CREATE TRIGGER语句创建触发器,用于在数据插入、更新或删除时触发特定的操作。
6. 修改和删除对象:可以使用ALTER PROCEDURE、DROP PROCEDURE、DROP FUNCTION等语句修改或删除已存在的PL/SQL对象。
四、示例以下是一个简单的PL/SQL程序示例,用于将输入的字符串转换为大写并输出:```plsqlDECLAREv_str VARCHAR2(100);v_upper VARCHAR2(100);BEGIN-- 获取输入字符串:in_str := 'hello world';v_str := :in_str;-- 将字符串转换为大写并输出v_upper := UPPER(v_str);DBMS_OUTPUT.PUT_LINE('转换后的字符串为: ' || v_upper);END;```在上述示例中,我们使用了DECLARE语句声明了两个变量v_str 和v_upper,分别用于存储输入的字符串和转换后的结果。
1.PL/SQL综述本章学习目标,了解如下内容:PL/SQL的功能和作用PL/SQL 的优点和特征;Oracle 10g、Oracle9i 的PL/SQL新特征1.1.SQL简介1.1.1.SQL语言特点SQL语言采用集合操作方式1.1.2.SQL语言分类●数据查询语言(SELECT语句):检索数据库数据。
●数据操纵语言(DML):用于改变数据库数据。
包括insert,update和delete三条语句。
●事务控制语言(TCL):用于维护数据库的一致性,包括commit,rollback和savepoint 三条语句●数据定义语言(DDL):用户建立、修改和删除数据库对象。
●数据控制语言(DDL):用于执行权限授予和收回操作。
包括grant 和revoke两条命令。
1.1.3.SQL 语句编写规则●SQL关键字不区分大小写●对象名和列名不区分大小写●字符值和日期值区分大小写●书写格式随意1.2.PL/SQL简介1.3.Oracle 10G PL/SQL 新特征2.PL/SQL开发工具本章学习目标:学会使用SQL*PLUS学会使用PL/SQL developer;学会使用Procedure Builder。
2.1.SQL*PLUS在命令行运行SQL*PlusSqlplus [username]/[password] [@server]3.PL/SQL 基础学习目标:●了解PL/SQL块的基本结构以及PL/SQL块的分类;●学会在PL/SQL块中定义和使用变量●学会在PL/SQL块中编写可执行语句;●了解编写PL/SQL代码的指导方针;●了解Oracle 10g的新特征——新数据类型BINARY_FLOAT 和BINARY_DOUBLE,以及指定字符串文本的新方法。
3.1.PL/SQL 块简介3.1.1.PL/SQL块结构3.1.2.PL/SQL 块分类匿名块命名块子程序触发器3.2. 定义并使用变量3.2.1.标量变量3.2.2.复合变量3.2.3.参照变量3.2.4.LOB 变量3.2.5.非PL/SQL 变量3.3.编写 PL/SQL 代码3.3.1.PL/SQL 词汇单元分隔符标识符文本(数字文本,字符文本,字符串文本,布尔文本,日期时间文本)注释3.3.2.PL/SQL 代码编码规则标识符命名规则大小写规则代码缩进嵌套块和变量范围PL/SQL中可以使用的SQL函数4.使用SQL语句学习目标:学会使用SELECT语句去完成基本查询功能学会使用INSERT,UPDA TE和DELETE语句去操作数据库数据学会使用COMMIT,ROLLBACK和SA VEPOINT语句去控制事务学会使用SELECT语句去实现各种复杂查询功能(数据分组、连接查询、子查询、层次查询、合并查询等)4.1.使用基本查询处理NULL:函数nvl(expr1,expr2),nvl2(expr1,expr2,expr3)4.2.使用DML语句使用多表插入数据语法:INSERT ALL insert_into_clause [value_clause] subquery;INSERT conditional_insert_clause subquery;示例1:使用ALL 操作符执行多表插入INSERT ALLWHEN deptno=10 THEN INTO dept10WHEN deptno=20 THEN INTO dept20WHEN deptno=30 THEN INTO dept30WHEN job=’CLERK’ THEN INTO clerkELSE INTO otherSelect * from emp;示例2:使用FIRST 操作符执行多表插入INSERT FIRSTWHEN deptno=10 THEN INTO dept10WHEN deptno=20 THEN INTO dept20WHEN deptno=30 THEN INTO dept30WHEN job=’CLERK’ THEN INTO clerkELSE INTO otherSELECT * FROM emp;4.3.使用事务控制语句4.3.1.事务和锁4.3.2.提交事务4.3.3.回退事务设置保存点:savepoint a;或者exec dbms_transaction.savepoint(‘a’)取消部分事务Rollback to a;或者Exec dbms_transaction.rollback_savepoint(‘a’)取消全部事务:Rollback; 或者exec dbms_transaction.rollback() 4.3.4.只读事务4.3.5.顺序事务4.4.数据分组4.4.1.分组函数MaxMinAvgSumCountVarianceStddev使用分组函数注意事项:●当使用分组函数时,除了函数Count(*) 之外,其他分组函数都会忽略NULL行。
连续求和与求总和的区别D 为天,S 为销售业绩为每天计算销售总额。
SELECTSUM(s) OVER (ORDERBY d),SUM(s) OVER ()FROM (SELECT'A'"A",1 D, 20 S FROM DUALUNIONALLSELECT'A'"A",2 D, 15 S FROM DUALUNIONALLSELECT'A'"A",3 D, 14 S FROM DUALUNIONALLSELECT'A'"A",4 D, 18 S FROM DUALUNIONALLSELECT'A'"A",5 D, 30 S FROM DUAL);各种求和举例CREATE TABLETEST_ZHUXP(DEPTNO VARCHAR2(10), ENAME VARCHAR2(10), SAL VARCHAR2(10));--部门姓名薪水SELECT test_zhuxp.*,sum(sal) over(partitionby deptno orderby ename) 部门连续求和,--各部门的薪水"连续"求和sum(sal) over (partitionby deptno) 部门总和, -- 部门统计的总和,同一部门总和不变100*round(sal/sum(sal) over (partitionby deptno),4) "部门份额(%)",sum(sal) over (orderby deptno DESC,ename) 连续求和, --所有部门的薪水"连续"求和sum(sal) over () 总和-- 此处sum(sal) over () 等同于sum(sal),所有员工的薪水总和100*round(sal/sum(sal) over (),4) "总份额(%)"FROM test_ZHUXP注意求和后可以排序不影响结果SELECT DEPTNO,ENAME,SAL,SUM(SAL) OVER(PARTITIONBY DEPTNO ORDERBY DEPTNO DESC, SAL DESC) 部门连续求和,SUM(SAL) OVER(ORDERBY DEPTNO DESC, SAL DESC) 公司连续求和FROM TEST_ZHUXP排序1.在求第一名成绩的时候,不能用row_number(),因为如果同班有两个并列第一,row_number()只返回一个结果2.rank()和dense_rank()的区别是:rank()是跳跃排序,有两个第二名时接下来就是第四名dense_rank()l是连续排序,有两个第二名时仍然跟着第三名SELECT t.*,RANK()OVER(PARTITIONBYCLASSORDERBY S DESC),dense_rank()OVER(PARTITIONBYCLASSORDERBY S DESC),ROW_NUMBER()OVER(PARTITIONBYCLASSORDERBY S DESC)FROM (SELECT'a' "NAME",1 "CLASS",80 "S"FROM DUALUNIONALLSELECT'b' "NAME",1 "CLASS",89 "S" FROM DUALUNIONALLSELECT'c' "NAME",1 "CLASS",89 "S" FROM DUALUNIONALLSELECT'e' "NAME",3 "CLASS",100 "S" FROM DUALUNIONALLSELECT'f' "NAME",3 "CLASS",100 "S" FROM DUALUNIONALLSELECT'g' "NAME",3 "CLASS",79 "S" FROM DUAL) t统计和group by的区别是可以看到每一行数据的所有信息注意加NAME后的区别SELECT t.*,SUM(1)OVER(PARTITIONBYCLASSORDERBYCLASS/*NAME*/)FROM (SELECT'a' "NAME",1 "CLASS",80 "S"FROM DUALUNIONALLSELECT'b' "NAME",1 "CLASS",89 "S" FROM DUALUNIONALLSELECT 'c' "NAME",1 "CLASS",89 "S" FROM DUALUNION ALLSELECT 'e' "NAME",1 "CLASS",100 "S" FROM DUALUNION ALLSELECT 'f' "NAME",3 "CLASS",100 "S" FROM DUALUNION ALLSELECT 'g' "NAME",3 "CLASS",79 "S" FROM DUAL) t开窗函数开窗函数开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:1:over(orderby xxx)按照xxx排序进行累计,order by是个默认的开窗函数over(partitionby xxx)按照部门分区2:over(orderby salary rangebetween5precedingand5following)每行对应的数据窗口是之前行幅度值不超过5,之后行幅度值不超过5例如:对于以下列aa1222345679sum(aa)over(orderby aa rangebetween2precedingand2following)得出的结果是AA SUM11021421421431841852261872299就是说,对于aa=5的一行,sum为5-1<=aa<=5+2的和对于aa=2来说,sum=1+2+2+2+3+4=14;又如对于aa=9,9-1<=aa<=9+2只有9一个数,所以sum=9;3:其它:over(orderby salary rowsbetween2precedingand4following)每行对应的数据窗口是之前2行,之后4行4:下面三条语句等效:over(orderby salary rowsbetweenunboundedprecedingandunboundedfollowing)每行对应的数据窗口是从第一行到最后一行,等效:over(orderby salary rangebetweenunboundedprecedingandunboundedfollowing)等效over(partitionbynull)任意删除重复行在这个表中如果class与score相同,就考虑这行数据多余,删除多余行,就随便保留一行。
ORACLE数据库结课论文一个好的程序, 必然联系着一个庞大的数据库网路...今年我们学习了oracle数据库这门课程, 起初的我, 对这个字眼是要多陌生有多陌生, 后来上课的时候听一会老师讲课, 偶尔再跟上上机课, 渐渐的学会了不少东西, 但我感觉, 我学到的仍是一些皮毛而已, 怀着疑惑和求知的心态, 我在网上搜索了关于oracle数据库的一些知识。
1.ORACLE的特点:可移植性ORACLE采用C语言开发而成, 故产品与硬件和操作系统具有很强的独立性。
从大型机到微机上都可运行ORACLE的产品。
可在UNIX、DOS、Windows等操作系统上运行。
可兼容性由于采用了国际标准的数据查询语言SQL, 与IBM的SQL/DS、DB2等均兼容。
并提供读取其它数据库文件的间接方法。
可联结性对于不同通信协议, 不同机型与不同操作系统组成的网络也可以运行ORAˉCLE数据库产品。
2.ORACLE的总体结构(1)ORACLE的文件结构一个ORACLE数据库系统包括以下5类文件:ORACLE RDBMS的代码文件。
数据文件一个数据库可有一个或多个数据文件, 每个数据文件可以存有一个或多个表、视图、索引等信息。
日志文件须有两个或两个以上, 用来记录所有数据库的变化, 用于数据库的恢复。
控制文件可以有备份, 采用多个备份控制文件是为了防止控制文件的损坏。
参数文件含有数据库例程起时所需的配置参数。
(2)ORACLE的内存结构一个ORACLE例程拥有一个系统全程区(SGA)和一组程序全程区(PGA)。
SGA(System Global Area)包括数据库缓冲区、日志缓冲区与共享区域。
PGA(Program Global Area)是每一个Server进程有一个。
一个Server进程起动时, 就为其分配一个PGA区, 以存放数据与控制信息。
(3)ORACLE的进程结构ORACLE包括三类进程:①用户进程用来执行用户应用程序的。
Oracle数据库学习笔记Oracle数据库基础 orcale属于关系型数据库,适⽤于各类⼤,中,⼩,微机环境,是⼀种⾼效率、可靠性好的、适应⾼吞吐量的数据库⽅案。
学习,实验完全免费,商⽤需要⽀付相应费⽤。
Oracle 数据库包括数据库实例,和数据库,⼆者脱离谁都没有存在的价值。
实例是⽤来操作数据库的对象,数据库是⽤来存储数据使⽤的。
Oracle主要组件包含实例组件,数据库组件。
SGA(System Global Area)是Oracle Instance的基本组成部分,PGA(Process Global Area)是为每个连接到Oracle database的⽤户进程保留的内存。
每个实例只有⼀个SGA,所有的进程都能访SGA。
PGA是程序全局区,每个⼀个进程都⼀个PGA,PGA是私有的,只有对应进程才能访问对应的PGA。
数据库中包含:参数⽂件,⼝令⽂件,数据库⽂件,控制⽂件,⽇志⽂件以及归档⽇志⽂件。
Oracle实例进场包含⽤户进程,服务器进程和后台进程。
SGA:系统全局区 系统全局区包含共享池,数据缓冲区,⽇志缓冲区。
“共享池”:是对SQL,PL/SQL程序进⾏语法分析,编译,执⾏的内存区;由库缓存和数据字典缓存组成;其⼤⼩直接影响数据库性能。
“数据缓冲区”:临时存储从数据库读⼊的数据,所有⽤户共享,数据缓存区的⽬的是加快数据读写。
“⽇志缓冲区”:⽇志记录数据库所有修改信息,其先产⽣于⽇志缓冲区,当达到⼀定数量时,由后台进程将⽇志数据写到⽇志⽂件中。
PGA:程序全局区 PGA包含单个服务器进程所需要的数据和控制信息,在⽤户进程连接到数据库并创建⼀个会话时⾃动分配的,保存每个与数据库连接的⽤户进程所需要的信息。
PGA为⾮共享区,只能单个进程使⽤,当⼀个⽤户会话结束,PGA释放。
后台进程 后台进程中包含PMON(进程监视器(Process Monitor)),SMON(系统监视器(System Monitor)),DBWR(数据库书写器(Database Write)),LGWR(⽇志书写器(Log Write)),CKPT(检查点(Checkpoint)),以及其他。
plsql使用技巧PL/SQL是Oracle数据库的一种编程语言,可以用于编写存储过程、触发器、函数等程序。
本文将从以下几个方面介绍PL/SQL的使用技巧:一、变量和常量的使用1.1 变量的定义在PL/SQL中,可以使用DECLARE语句来定义变量。
例如:DECLAREv_name VARCHAR2(100);BEGINv_name := 'John';END;1.2 常量的定义在PL/SQL中,可以使用CONSTANT关键字来定义常量。
例如:DECLAREc_pi CONSTANT NUMBER := 3.1415926;BEGINNULL;END;1.3 变量和常量的命名规则在PL/SQL中,变量和常量的命名规则与其他编程语言类似。
变量和常量的名称必须以字母开头,并且只能包含字母、数字和下划线。
二、条件语句的使用2.1 IF语句IF语句用于根据条件执行不同的代码块。
例如:DECLAREv_age NUMBER := 18;BEGINIF v_age >= 18 THENDBMS_OUTPUT.PUT_LINE('You are an adult.');ELSEDBMS_OUTPUT.PUT_LINE('You are a minor.');END IF;END;2.2 CASE语句CASE语句用于根据不同情况执行不同代码块。
例如:DECLAREv_day_of_week NUMBER := 5;BEGINCASE v_day_of_weekWHEN 1 THEN DBMS_OUTPUT.PUT_LINE('Monday');WHEN 2 THEN DBMS_OUTPUT.PUT_LINE('Tuesday');WHEN 3 THEN DBMS_OUTPUT.PUT_LINE('Wednesday'); WHEN 4 THEN DBMS_OUTPUT.PUT_LINE('Thursday'); WHEN 5 THEN DBMS_OUTPUT.PUT_LINE('Friday');ELSE DBMS_OUTPUT.PUT_LINE('Weekend');END CASE;END;三、循环语句的使用3.1 FOR循环FOR循环用于执行一组代码块一定次数。
oracle学习心得一、sqlserver的理解sqlserver服务器就像一栋大楼,大楼里的机房就像服务器的数据库,机房里的电脑如同数据库里的表1、登录用户可以登录服务器——可以进大楼2、登录用户成为数据库用户才能进指定的数据库——进入大楼的人给了某个机房的钥匙才能进入机房3、登录用户有权限使用表——进入机房的人有电脑的密码才能使用电脑二、oracle的理解oracle服务器(全局数据库)就像一个商场,商场的每一家公司是表空间,公司的业务是表1、数据库由多个表空间组成——商场里有多家公司组成2、表空间由段组成——公司要有自己的经营业务,可以只有一个业务,就是一个表空间中只有一个段,可以有多个业务,就是一个表空间有多个段3、段由区组成——单个业务的细分类别。
例如有家公司经营三个业务,卖书,卖家电,卖衣服,则每个业务就是一个段。
而每个业务又有细分,比如卖书的话要进行分类了。
计算机区,人文区,小说区等,每一区都要放上书架存放书籍,则书架就是oracle块,存放数据的三、数据库,表空间,用户(指定默认表空间),表统统由管理员管理四、在oem中管理数据库的步骤1、创建1)存储——表空间——创建表空间(tomspace)(类似于在sql中创建数据库,通常可以省略,使用默认表空间为users,,临时表空间为temp)2)首先展开安全性——创建新用户(tom,指定表空间)(类似于在sql中指定数据库用户)3)创建表——指定方案(用户)和表空间(列名不要带<>)4)设置约束5)输入信息:方案——用户名——表——右击——查看/编辑目录…2、修改1)方案——用户名——表2)修改表结构,添加约束3、删除:右击表——移去五、注意事项1、刚创建的用户不会出现在方案中,只有创建了一个表指定方案和表空间,该用户的方案名就会出现在方案中,此时就可以方便为该方案创建其他表1)新创建的用户能在sqlplus中登录,为什么不能在企业管理器中登录呢?解答:需要授予selectanydirectory权限才能正常登录企业管理器,但没有其他权限2)可以对创建的用户在安全性中赋予角色权限,如dba,则该用户就是数据库管理员3)sys用户主要用来维护系统信息和管理实例,只能以sysoper 或sysdba角色登录4)安装oracle的用户自动为ora-dba权限,自动是sys用户,所以在登录时不需要用户名和密码,只要选中以sysdba登录。
备注:以下是个人学习笔记总结,其实是本人容易忘记,工作中碰到的一些知识点,记录下来整理成笔记了,序号之间并不是按照某种类型划分的,都是随意的标记一下,希望对大家有所帮助。
昵称:阿杜笑傲江湖(其实就是个名字而已,并不江湖…)name:杜立鸿(不要冒充,万一哪天中奖了呢?)sex:爷们---------------------------废话不多说,GO,GO,Go……1.允许修改分区建(有时候分区键更新不了,需要以下这样处理,当然了分区键本来是不允许更新的,都得根据实际情况)alter table t1 enable row movement;2. 获取某一时间最近的时间sqlselect *from t_datetime twhere t.f_time - to_date('2018-09-06 10:10:00','yyyy-mm-ddhh24:mi:ss') =(select min(t.f_time - to_date('2018-09-06 10:10:00','yyyy-mm-ddhh24:mi:ss'))from t_datetime t);3. 1.创建一个object类型的数据库类型对象。
表示学生实体类型。
(注意:此类型必须定义为数据库对象级别的类型,而不能定义成包、函数级别的类型。
否则,函数外部代码是无法识别该类型的)。
CREATE OR REPLACE TYPE student_obj_type AS OBJECT(stu_no NUMBER, --学号stu_name VARCHAR2(255), --姓名stu_sex VARCHAR2(2),--性别score NUMBER--成绩);4.创建一个嵌套表类型的数据库类型对象。
表示学生实体集合类型。
该类型也将用作函数中定义的返回类型。
(注意:此类型必须定义为数据库对象级别的类型,而不能定义成包、函数级别的类型。
否则,函数外部代码是无法识别该类型的。
)CREATE OR REPLACE TYPE student_tab_type IS TABLE OF student_obj_type;5.INSERT ALL写法(一次查询多次插入,避免多次查询)INSERT ALLINTO T_TABLE_NAME --目标表(ORG_ID,ORG_NAME,ORG_TYPE)VALUES(ORG_ID,ORG_NAME,’01’)INTO T_TABLE_NAME(ORG_ID,ORG_NAME,ORG_TYPE)VALUES(ORG_ID,NODE_NAME,’02’)SELECT ORG_ID,ORG_NAME,NODE_NAMEFROM T_ORG6.带恢复点的事物COMMIT;INSERT INTO student (s_id, s_name) VALUES ('S001', 'tarring1');SAVEPOINT firstdate;INSERT INTO student (s_id, s_name) VALUES ('S002', 'tarring2');SAVEPOINT seconddate;DELETE FROM student;ROLLBACK TO firstdate;SELECT * FROM student;7. 查看当前oracle字符集是什么格式的select userenv('language') from dual;如果是以下字符集,一个汉字占用2个字节:SIMPLIFIED CHINESE_CHINA.ZHS16GBK如果是以下字符集,一个汉字占用3个字节:SIMPLIFIED CHINESE_CHINA.AL32UTF88. 查看当前oracle环境中一个汉字占多少个字节可以用下面的sql文查看select lengthb('啊') from dual;9. 查看执行计划explain plan for你要查看的SQL语句;commit;select * from table(dbms_xplan.display);10.返回今年的第几天Select to_char(sysdate,'DDD') from dual;11.返回这个月的第几天select to_char(sysdate,'DD') from dual;12.返回这周的第几天Select to_char(sytdate,'D') from dual;13.查询执行最慢的sqlselect*from(select t.SQL_TEXT,t.SQL_FULLTEXT,t.EXECUTIONS "执行次数",round(t.ELAPSED_TIME/1000000,2) "总执行时间",case when t.EXECUTIONS =0then0elseround(t.ELAPSED_TIME/1000000/t.EXECUTIONS,2)end "平均执行时间",MAND_TYPE,t.PARSING_USER_ID,ERNAME,t.HASH_VALUEfrom v$sqlarea tleft join all_users aon t.PARSING_USER_ID = ER_IDwhere t.EXECUTIONS >0order by t.ELAPSED_TIME/t.EXECUTIONS desc)where rownum<5014.查询执行次数最多的sqlselect *from (select s.SQL_TEXT,s.EXECUTIONS "执行次数",s.PARSING_USER_ID "用户名",rank() over(order by EXECUTIONS desc) EXEC_RANKfrom v$sql sleft join all_users uon ER_ID = s.PARSING_USER_ID) twhere exec_rank <= 100;15行转列select *from (select name,numsfrom demo) pivot (sum(nums)for name in ('苹果' 苹果, '橘子', '葡萄', '芒果'));注意: pivot(聚合函数 for 列名 in(类型)),其中 in('') 中可以指定别名,in中还可以指定子查询,比如 select distinct code from customers16. instr()函数instr(string1,string2,start_position,nth_appearence)string1:要在此字符串中查找。
string2:要在string1中查找的字符串。
start_position:从string1开始查找的位置。
可选,默认为1,正数时,从左到右检索,负数时,从右到左检索。
nth_appearence:查找第几次出现string2。
可,默认为1,不能为负。
注:如果没查找到,返回0。
例:select instr('abcd','a')from dual;--返回1select instr('abcd','c')from dual;--返回3select instr('abcd','e')from dual;--返回017.统计某个字符串里含有某个字符的个数(例子:统计感叹号的个数)select length('!a,b,!c,d')-length(replace('!a,b,!c,d','!',null))from dual;字符串总长度剔除掉感叹号的长度18. instr()函数也可以用于模糊查询以及判断包含关系例如:①select code,name, dept, occupation from staff where instr(code,'001')>0;等同于select code,name, dept, occupation from staff where code like'%001%';②select ccn,mas_loc from mas_loc where instr('FH,FHH,FHM',ccn)>0;等同于select ccn,mas_loc from mas_loc where ccn in('FH','FHH','FHM');19. 分析表和索引analyze table tablename compute statistics;analyze index indexname compute statistics;20.a字段为空时,不能这样查询and a<>99(这个条件永远不成立,会导致查询不出数据)注意:如果a字段有值并且也有为空的,那么上述条件只能查询出不为空的并且不等于99的数据;如果a字段全部为空,则查询不出数据。
其实加一个为空处理函数即可:nvl(a,0) <> 99;21. 查看一下数据库现有的进程数,是否已经达到参数processes的大小。
1.select count(*) from v$process; --取得数据库目前的进程数。
2.select value from v$parameter where name = 'processes';--取得进程数的上限。
22.复合变量的应用--数组类型应用declaretype org_varray_type is varray(5) of varchar2(25);v_org_varray org_varray_type;beginv_org_varray := org_varray_type('1','2','3','4','5');dbms_output.put_line('输出1:' || v_org_varray(1) || '、'|| v_org_varray(2) || '、'|| v_org_varray(3) || '、'|| v_org_varray(4));dbms_output.put_line('输出2:' || v_org_varray(5));v_org_varray(5) := '5001';dbms_output.put_line('输出3:' || v_org_varray(5));end;--存储单列多行declaretype org_table_type is table of varchar2(25)index by binary_integer;v_org_table org_table_type;beginv_org_table(1) := '1';v_org_table(2) := '2';v_org_table(3) := '3';v_org_table(4) := '4';v_org_table(5) := '5';dbms_output.put_line('输出1:' || v_org_table(1) || '、'|| v_org_table(2) || '、'|| v_org_table(3) || '、'|| v_org_table(4));dbms_output.put_line('输出2:' || v_org_table(5));end;--存储多列多行和rowtype结合使用declaretype t_type is table of adu_test%rowtype;v_type t_type;beginselect org_id,org_name,parent_id bulk collect into v_typefrom adu_testwhere adu__id <= 3;for v_index in v_type.first .. v_st loopdbms_output.put_line(v_type(v_index).org_id || ' ' || v_type(v_index).org_name);end loop;end;--存储多列多行和record结合使用declaretype test_emp is record(c1 adu__name%type,c2 adu_test.parent_id%type);type t_type is table of test_emp;v_type t_type;beginselect org_name, parent_id bulk collect into v_typefrom adu_testwhere adu__id <= 3;for v_index in v_type.first .. v_st loopdbms_output.put_line(v_type(v_index).c1 || ' ' || v_type(v_index).c2);end loop;end;23.一些查看信息和处理操作1.查看所用户:select * from dba_users;select * from all_users;select * from user_users;2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限):select * from dba_sys_privs;select * from user_sys_privs;3.查看角色(只能查看登陆用户拥的角色)所包含的权限select * from role_sys_privs;4.查看用户对象权限:select * from dba_tab_privs;select * from all_tab_privs;select * from user_tab_privs;5.查看所角色:select * from dba_roles;--2.禁用表table_name的所trigger。