您的当前位置:首页常用oralce_sql

常用oralce_sql

2023-11-09 来源:六九路网

1.解锁账户:

默认的scott用户是被锁定的,先解锁就能登陆上了。 使用下面的语句解锁scott:

alter user scott account unlock;

解锁之后可能会要求你该密码:

alter user scott identified by tiger;

再登陆:

sqlplus scott/tiger

就能登陆了

Oracle锁定和解锁用户的命令

SQL> conn /as sysdba  已连接。  //scott 用户在没有设定tieger默认密码时,登陆不上

2.

常用oralce_sql

标签:

小编还为您整理了以下内容,可能对您也有帮助:

在oracle数据库中,要求两个字段的和要怎么写sql语句

在oracle数据库中,要求两个字段的和可以用sql语句(前提是两个字段都是数字型):

SELECT  num1+num2 AS num FROM table_name;

其中num1、num2是要求和的两个字段,num是新命名的和字段,table_name是要查询的表名。

扩展资料:

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。

可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

1,如果都是数字类型的直接把这两个字段相加

select

a+b as ab

from S ;

或者你的意思是 select sum(a+b) from S;

2,如果是不同的字段类型就不能求和了,但是可以使用“||”或者CONCAT()函数

2.1 select a||b from S;

2.2 select concat(a,b) from S;

参考资料来源:百度百科-Oracle数据库

Oracle常见SQL分页实现方案

  在Oracle中 用SQL来实现分页有很多种实现方式 但有些语句可能并不是很通用 只能用在一些特殊场景之中

  以下介绍三种比较通用的实现方案 在以下各种实现中 ROWNUM是一个最核心的关键词 在查询时他是一个虚拟的列 取值为 到记录总数的序号

  首先来介绍我们工作中最常使用的一种实现方式

  SELECT *

  FROM (SELECT ROW_ * ROWNUM ROWNUM_

  FROM (SELECT *

  FROM TABLE

  WHERE TABLE _ID = XX

  ORDER BY GMT_CREATE DESC) ROW_

  WHERE ROWNUM <= )

  WHERE ROWNUM_ >= ;

  其中最内层的查询SELECT为不进行翻页的原始查询语句 可以用自己的任意Select SQL替换 ROWNUM <= 和ROWNUM >= 控制分页查询的每页的范围

  分页的目的就是控制输出结果集大小 将结果尽快的返回 上面的SQL语句在大多数情况拥有较高的效率 主要体现在WHERE ROWNUM <= 这句上 这样就控制了查询过程中的最大记录数

  上面例子中展示的在查询的第二层通过ROWNUM <= 来控制最大值 在查询的最外层控制最小值 而另一种方式是去掉查询第二层的WHERE ROWNUM <= 语句 在查询的最外层控制分页的最小值和最大值 此时SQL语句如下 也就是要介绍的第二种实现方式

  SELECT *

  FROM (SELECT A * ROWNUM RN

  FROM (SELECT *

  FROM TABLE

  WHERE TABLE _ID = XX

  ORDER BY GMT_CREATE DESC) A)

  WHERE RN BEEEN AND ;

  由于Oracle可以将外层的查询条件推到内层查询中 以提高内层查询的执行效率 但不能跨越多层

  对于第一个查询语句 第二层的查询条件WHERE ROWNUM <= 就可以被Oracle推入到内层查询中 这样Oracle查询的结果一旦超过了ROWNUM条件 就终止查询将结果返回了

  而 第二个查询语句 由于查询条件BEEEN AND 是存在于查询的第三层 而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义 因为最内层查询不知道RN代表什么) 因此 对于第二个查询语句 Oracle最内层返回给中间层的是所有满足条件的数据 而中间层返回给最外层的也是所有数据 数据的过滤在最外层完成 显然这个效率要比第一个查询低得多

  以上两种方案完全是通过ROWNUM来完成 下面一种则采用ROWID和ROWNUM相结合的方式 SQL语句如下

  SELECT *

  FROM (SELECT RID

  FROM (SELECT R RID ROWNUM LINENUM

  FROM (SELECT ROWID RID

  FROM TABLE

  WHERE TABLE _ID = XX

  ORDER BY GMT_CREATE DESC) R

  WHERE ROWNUM <= )

  WHERE LINENUM >= ) T

  TABLE T

  WHERE T RID = T ROWID;

  从语句上看 共有 层Select嵌套查询 最内层为可替换的不分页原始SQL语句 但是他查询的字段只有ROWID 而没有任何待查询的实际表字段 具体查询实际字段值是在最外层实现的

  这种方式的原理大致为 首先通过ROWNUM查询到分页之后的 条实际返回记录的ROWID 最后通过ROWID将最终返回字段值查询出来并返回

  和前面两种实现方式相比 该SQL的实现方式更加繁琐 通用性也不是非常好 因为要将原始的查询语句分成两部分(查询字段在最外层 表及其查询条件在最内层)

  但这种实现在特定场景下还是有优势的 比如我们经常要翻页到很后面 比如 条记录中我们经常需要查 及其以后的数据 此时该方案效率可能要比前面的高

  因为前面的方案中是通过ROWNUM <= 来控制的 这样就需要查询出 条数据 然后取最后 之间的数据 而这个方案直接通过ROWID取需要的那 条数据

  从不断向后翻页这个角度来看 第一种实现方案的成本会越来越高 基本上是线性增长 而第三种方案的成本则不会像前者那样快速 他的增长只体现在通过查询条件读取ROWID的部分

  当然 除了以上提了这些方案 我们还可以用以下的SQL来实现

  SELECT *

  FROM TABLE

  WHERE TABLE _ID NOT IN

  (SELECT TABLE _ID FROM TABLE WHERE ROWNUM <= )

  AND ROWNUM <= ;

  SELECT *

  FROM TABLE

  WHERE ROWNUM <=

  MINUS

  SELECT * FROM TABLE WHERE ROWNUM <= ;

  ………………

  注意 当ROWNUM作为查询条件时 他是在order by之前执行 所以要特别小心

  比如我们想查询TABLE 中按TABLE _ID倒序排列的前 条记录不能用如下的SQL来完成

lishixin/Article/program/Oracle/201311/11198

如何使用oracle提供的SQL

Sql性能非常差的时候,oracle提供了SQL_TRACE来跟踪sql的执行情况。

注:分析sql的方式比较多,还有根据优化器、sql执行计划来分析。

SQL_TRACE能够将sql执行的过程输出到一个trace文件里面。

首先设置自己定义的trace文件的标识方便查找。

alter session set tracefile_identifier='mytest';

然后对当前会话启动SQL_TRACE,最好不要一直打开该开关,代价比较大。

alter session set sql_trace=true;

然后我们执行一条sql语句。

最后关闭该开关的状态。

alter session set sql_trace=false;

我们可以从目录%ORACLE_BASE%/diag/rdbms/orcl/orcl/trace(11g版本的路径,如果是10g的应该不一样)中

找到自己定义的trace文件。

原始的trace文件的可读性不高,我们一般使用oracle自带的工具,tkprof来处理这个trace文件。我们可以查看tkprof的帮助。

tkprof orcl_ora_3820_mytest.trc out.txt

我们来看刚才生成的trace文件,头部信息描述了tkprof 的版本以及报告中一些列的含义,对于任何一条sql语句,都应该包含Parse—sql分析阶段,Execute—sql执行阶段,Fetch—数据提取阶段,横向的列如图所示,包含消耗cpu时间0.00秒,操作总耗时0.04秒,物理读取了0个数据块,没有发生current方式的读取(一般在update会发生),一共提取记录1条。

Misses in library cache ring parse: 0表示这是一次软分析(关于硬分析和软分析下面会接着谈到)

Optimizer mode: ALL_ROWS表示oracle的优化器模式为ALL_ROWS。这也就是前面提到的另外的分析方式优化器。

下面是sql执行的具体计划,可以看到执行计划选择的是全表扫描。

经过处理以后的trace文件的确比较容易看明白,它有助于我们分析sql的性能问题。

下面我通过一个trace实例来解释一下,为什么OLTP系统中需要变量绑定机制。

当用户和数据库建立连接,并发送一条sql语句以后,oracle会对该sql进行hash函数运算(hash算法提供了一种快速存取数据的方法,它用一种算法建立键值与真实值之间的对应关系,每一个真实值只能有一个键值,但是一个键值可以对应多个真实值,以方便存取),得到一个hash值,然后到共享池中寻找是否有匹配的hash值的sql存在,如果有,就直接使用该sql的执行计划去执行sql。如果没有,oracle就会认为这是一条新的sql语句,然后按照语法分析,语义分析,生成执行计划,执行sql这些步骤来执行最终把结果返回给用户。这些步骤也被成为硬分析,可以想象,如果减少硬分析,能够大大降低数据库花费在sql解析上的资源开销。

我们先执行一条sql 1000次,比较绑定变量和不绑定变量的差异。得到结果以后,要计算实际的消耗,我们需要把OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS以及OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS的时间累计起来,前者表示数据字典表的相关的信息,包含权限控制等,后者表示sql所衍生出的递归sql语句的信息。可以看到绑定变量的,整条语句执行时间为0.22+0.02=0.24秒,CPU时间0.18+0.03=0.21秒,分析次数3次,执行次数1003次。而不绑定变量的时候,整条语句执行时间为0.28+1.29=1.57秒,CPU时间0.31+1.26=1.57秒,分析次数1002次,执行次数1003次。可见绑定变量的确能够带来更低的开销。(如何设计数据库中使用绑定变量也是和系统息息相关的,很多数据库问题都是在设计以后就已经存在的)

应用级调优分析:

就通常所说的三层架构来说,中间件这一层能够起到一个缓冲池的作用,如果并发用户数到3000这个数量级的时候,中间件能够控制不是所有的用户都能直接连接到数据库,当然这里的程序会快速响应用户请求,保证缓冲池的队列等待不会很久。

对应用这一级别的调优,主要集中在app程序,中间件的监控,集群配置等方面。如果是发现应用级别的问题,首先要分析是配置问题,还是程序本身的问题。如果并发用户数很大,中间件的线程池最大值配置过小,会导致在请求队列堆积,表现就是线程监控视图中,请求的队列堆积比较多,一般可以调整线程池最大值来解决。我们来看看weblogic的监控视图。

考虑到如果为每一个请求都创建一个新线程来处理的话,那么我们难以在系统中实现足够数量的线程。不受的创建线程可能耗尽系统资源,因此引入了线程池。线程池的思想是在进程开始时创建一定数量的线程并将它们置入一个池(pool)中,线程在这个池中等待工作。当服务器接收到一个请求时,它就从池中唤醒一个线程(如果有可用的线程),由它来处理请求。一旦线程服务完毕,它就返回线程池等待后面的工作。

线程池利用已存在的线程服务请求要比等待创建一个线程要快,并且线程池了线程的数量。

如果怀疑是程序的问题,我们一般可以通过java自带的工具来帮助分析,工具很多。这里我主要提到一个jdk1.6以后附带的jvisualvm。

我们打开jdk1.6,找到并运行jvisualvm.exe。

我们发现应用程序分为本地,远程两部分。本地包含本地运行的java进程,远程能够通过配置连接到远程服务器上的java进程。我们先启动一个tomcat。可以看到本地应用程序已经打开了一个带有tomcat以及进程标识id的菜单。双击打开。这里我们一般关心2个视图。监视、线程。

其中监视视图比较关心垃圾回收活动(顾名思义,回收那些在程序里面不再使用到的内存空间),堆内存变化。如果在压力测试过程中,堆内存变化是一个逐渐上涨的趋势,并且经过多次手动gc回收,还是保持这个趋势,说明内存泄漏的可能性很大。如果猜测有内存泄漏,可以通过分析java的heap mp。JVM (java虚拟机)记录下问题发生时系统的运行状态并将其存储在转储(mp)文件中。Heap mp就是这样一种文件形式。

线程视图比较关心线程的当前执行状态,这里可以生成另一种转储文件 Java mp。Java mp,也叫做 Thread mp,是 JVM 故障诊断中最重要的转储文件之一。JVM 的许多问题都可以使用这个文件进行诊断,其中比较典型的包括线程阻塞,CPU 使用率过高,JVM Crash,堆内存不足,和类装载等问题。其中线程阻塞更加常见。

oracle与sql的区别(常用函数)

  许多软件公司都理解开发不依赖于特定数据库类型(例如Oracle SQL Server DB )的应用程序的重要性 它可以让客户们选择自己习惯的平台 一般来说 软件开发人员都能够识别出他们的负责数据库维护的客户 和必须使用现有平台和个性化的客户

  关于Oracle和SQL Server之间的区别 已经有很多篇文章从企业的角度和数据库管理员的角度出发描写了两者之间的一般差别 在这篇文章里面 我将会从应用程序的角度向你描述SQL erver 和oracle平台之间的区别 并且将会讨论开发不依赖于数据库环境的应用程序的几种可能的方法 与此同时 我不会再论讨对于应用程序来说 两个平台之间显而易见的区别 例如表的分割和索引

  定义通用接口和语言有很少的几种通用语言和接口可以让应用程序不依赖于数据库 想来也可以以同样的方式应用在关系型数据库上面: ANSI是美国国家标准局定义的 这是一家志愿者成员的组织(用私人基金运转) 他们在有关设备和程序等广泛领域内开发了国家承认的标准 在数据库领域 ANSI定义了编写SQL命令的标准 假设命令可以运行在任何的数据库上 而不需要更改命令的语法

  ODBC是开放数据库连接(ODBC)接口 微软定义的 它可以让应用程序访问数据库管理系统(DBMS)中的数据 使用SQL作为访问数据的标准 ODBC允许最大的互联性 这意味着一个单个的应用程序可以访问不同的数据库管理系统 然后 应用程序终端用户可以添加开放数据库连接(ODBC)数据库驱动来将应用程序与他们所选择的数据库管理系统链接上 OLE DB是ODBC的继承者 是一组允许例如基于VB C++ Access等任何可以连接到类似SQL Server Oracle DB MySQL等后台的 前台 的软件组件 在许多种情况下 OLE DB组件都比原有的ODBC提供了好得多的性能

  JDBC(Java数据库连接)应用程序接口是Java编程语言和广泛范围的数据库 SQL数据库和其他表列数据源(例如电子表格或者普通文本文件)之间 进行不依赖于数据库的连接的行业标准 JDBD应用程序接口为基于SQL的数据库访问提供了调用级别的应用程序接口 真实世界中的通用接口不幸的是 并不是所有数据库级别的命令都是ANSI 每个数据库平台都有自己的扩展功能 对于ANSI或者通用接口 一般来说都代表着几本功能 因此也可能意味着丧失了性能方面的竞争力 对于小型数据库和小型应用程序来说 要维护对数据库的通用访问是简单的 但是当数据库和/或应用程序变得越来越大 越来越复杂 你就不得不向代码中添加功能

  SQL Server和Oracle的常用函数对比

   数学函数

   绝对值

  S:select abs( ) value

  O:select abs( ) value from al

   取整(大) S:select ceiling( ) value O:select ceil( ) value from al

   取整(小)

  S:select floor( ) value O:select floor( ) value from al

   取整(截取)

  S:select cast( as int) value O:select trunc( ) value from al

   四舍五入S:select round( ) value O:select round( ) value from al

   e为底的幂S:select Exp( ) value O:select Exp( ) value from al

   取e为底的对数S:select log( ) value O:select ln( ) value from al;

   取 为底对数

  S:select log ( ) value

  O:select log( ) value from al;

   取平方

  S:select SQUARE( ) value

  O:select power( ) value from al

   取平方根

  S:select SQRT( ) value

  O:select SQRT( ) value from al

   求任意数为底的幂S:select power( ) value O:select power( ) value from al

   取随机数

  S:select rand() value

  O:select sys dbms_random value( ) value from al;

   取符号

  S:select sign( ) value

  O:select sign( ) value from al

   三角函数相关

   圆周率S:SELECT PI() value

  O:不知道

   sin cos tan 参数都以弧度为单位

  例如 select sin(PI()/ ) value得到 (SQLServer)

   Asin Acos Atan Atan 返回弧度

   弧度角度互换(SQLServer Oracle不知道)

  DEGREES 弧度 〉角度

  RADIANS 角度 〉弧度

   数值间比较

   求集合最大值

  S:select max(value) value from

  (select value

  union

  select value

  union

  select value

  union

  select value)a

  O:select greatest( ) value from al

   求集合最小值

  S:select min(value) value from

  (select value

  union

  select value

  union

  select value

  union

  select value)a

  O:select least( ) value from al

   如何处理null值(F 中的null以 代替) S:select F IsNull(F ) value from Tbl O:select F nvl(F ) value from Tbl

   字符串函数

   求字符序号

  S:select ascii( a ) value

  O:select ascii( a ) value from al

   从序号求字符

  S:select char( ) value

  O:select chr( ) value from al

   连接

  S:select + + value

  O:select CONCAT( )|| value from al

   子串位置 返回 S:select CHARINDEX( s sdsq ) value O:select INSTR( sdsq s ) value from al

   模糊子串的位置 返回 参数去掉中间%则返回 // 本文转自 C++Builder 研究 ?i= &d=dwn rn S:select patindex( %d%q% sdsfasdqe ) value O:oracle没发现 但是instr可以通过第四个参数控制出现次数select INSTR( sdsfasdqe sd ) value from al 返回

   求子串S:select substring( abcd ) value O:select substr( abcd ) value from al

   子串代替 返回aijklmnef S:SELECT STUFF( abcdef ijklmn ) value O:SELECT Replace( abcdef bcd ijklmn ) value from al

   子串全部替换

  S:Replace

  O:select Translate( fasdbfasegas fa 我 ) value from al

   长度S:len datalength

  O:length

   大小写转换 lower upper

   单词首字母大写

  S:没发现

  O:select INITCAP( abcd dsaf df ) value from al

   左补空格(LPAD的第一个参数为空格则同space函数)

  S:select space( )+ abcd value

  O:select LPAD( abcd ) value from al

   右补空格(RPAD的第一个参数为空格则同space函数)

  S:select abcd +space( ) value

  O:select RPAD( abcd ) value from al

   删除空格S:ltrim rtrim O:ltrim rtrim trim

   重复字符串S:select REPLICATE( abcd ) value

  O:没发现

   发音相似性比较(这两个单词返回值一样 发音相同) S:SELECT SOUNDEX ( Smith ) SOUNDEX ( Smythe ) O:SELECT SOUNDEX ( Smith ) SOUNDEX ( Smythe ) from al SQLServer中用SELECT DIFFERENCE( Smithers Smythers ) 比较soundex的差返回 为同音 最高

   日期函数

   系统时间

  S:select getdate() value

  O:select sysdate value from al

   前后几日

  直接与整数相加减

   求日期S:select convert(char( ) getdate() ) value

  O:select trunc(sysdate) value from al

  select to_char(sysdate yyyy mm dd ) value from al

   求时间S:select convert(char( ) getdate() ) value O:select to_char(sysdate hh :mm:ss ) value from al

   取日期时间的其他部分

  S:DATEPART和DATENAME函数(第一个参数决定)

  O:to_char函数第二个参数决定

  参数 下表需要补充

  year yy yyyy quarter qq q (季度) month mm m (m O无效) dayofyear dy y (O表星期) day dd d (d O无效) week wk ww (wk O无效)

  weekday dw (O不清楚)

  Hour hh hh hh (hh hh S无效) minute mi n (n O无效) second ss s (s O无效)

  millisecond ms (O无效)

  

   当月最后一天

  S:不知道

  O:select LAST_DAY(sysdate) value from al

   本星期的某一天(比如星期日)

  S:不知道

  O:SELECT Next_day(sysdate ) vaule FROM DUAL;

   字符串转时间

  S:可以直接转或者select cast( as datetime) value

  O:SELECT To_date( : : yyyy mm dd hh mi ss ) vaule FROM DUAL;

   求两日期某一部分的差(比如秒)

  S:select datediff(ss getdate() getdate()+ ) value O:直接用两个日期相减(比如d d = )

  SELECT (d d )* * * vaule FROM DUAL;

   根据差值求新的日期(比如分钟)

  S:select dateadd(mi getdate()) value

  O:SELECT sysdate+ / / vaule FROM DUAL;

   求不同时区时间

  S:不知道

  O:SELECT New_time(sysdate ydt gmt ) vaule FROM DUAL;

   时区参数 北京在东 区应该是Ydt

  AST ADT大西洋标准时间

  BST BDT白令海标准时间

  CST CDT中部标准时间

  EST EDT东部标准时间

  GMT格林尼治标准时间

  HST HDT阿拉斯加—夏威夷标准时间

  MST MDT山区标准时间

  NST纽芬兰标准时间

  PST PDT太平洋标准时间

  YST YDT YUKON标准时间

  Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:

  函数Oracle Microsoft SQL Server

  把字符转换为ASCII ASCII ASCII

  字串连接CONCAT (expressiοn + expressiοn)

  把ASCII转换为字符CHR CHAR

  返回字符串中的开始字符(左起)INSTR CHARINDEX

  把字符转换为小写LOWER LOWER

  把字符转换为大写UPPER UPPER

  填充字符串的左边LPAD N/A

  清除开始的空白LTRIM LTRIM

  清除尾部的空白RTRIM RTRIM

  字符串中的起始模式(pattern)INSTR PATINDEX

  多次重复字符串RPAD REPLICATE

  字符串的语音表示SOUNDEX SOUNDEX

  重复空格的字串RPAD SPACE

  从数字数据转换为字符数据TO_CHAR STR

  子串SUBSTR SUBSTRING

  替换字符REPLACE STUFF

  将字串中的每个词首字母大写INITCAP N/A

  翻译字符串TRANSLATE N/A

  字符串长度LENGTH DATELENGTH or LEN

  列表中最大的字符串GREATEST N/A

  列表中最小的字符串LEAST N/A

lishixin/Article/program/Oracle/201311/16561

oracle与sql的区别(常用函数)

  许多软件公司都理解开发不依赖于特定数据库类型(例如Oracle SQL Server DB )的应用程序的重要性 它可以让客户们选择自己习惯的平台 一般来说 软件开发人员都能够识别出他们的负责数据库维护的客户 和必须使用现有平台和个性化的客户

  关于Oracle和SQL Server之间的区别 已经有很多篇文章从企业的角度和数据库管理员的角度出发描写了两者之间的一般差别 在这篇文章里面 我将会从应用程序的角度向你描述SQL erver 和oracle平台之间的区别 并且将会讨论开发不依赖于数据库环境的应用程序的几种可能的方法 与此同时 我不会再论讨对于应用程序来说 两个平台之间显而易见的区别 例如表的分割和索引

  定义通用接口和语言有很少的几种通用语言和接口可以让应用程序不依赖于数据库 想来也可以以同样的方式应用在关系型数据库上面: ANSI是美国国家标准局定义的 这是一家志愿者成员的组织(用私人基金运转) 他们在有关设备和程序等广泛领域内开发了国家承认的标准 在数据库领域 ANSI定义了编写SQL命令的标准 假设命令可以运行在任何的数据库上 而不需要更改命令的语法

  ODBC是开放数据库连接(ODBC)接口 微软定义的 它可以让应用程序访问数据库管理系统(DBMS)中的数据 使用SQL作为访问数据的标准 ODBC允许最大的互联性 这意味着一个单个的应用程序可以访问不同的数据库管理系统 然后 应用程序终端用户可以添加开放数据库连接(ODBC)数据库驱动来将应用程序与他们所选择的数据库管理系统链接上 OLE DB是ODBC的继承者 是一组允许例如基于VB C++ Access等任何可以连接到类似SQL Server Oracle DB MySQL等后台的 前台 的软件组件 在许多种情况下 OLE DB组件都比原有的ODBC提供了好得多的性能

  JDBC(Java数据库连接)应用程序接口是Java编程语言和广泛范围的数据库 SQL数据库和其他表列数据源(例如电子表格或者普通文本文件)之间 进行不依赖于数据库的连接的行业标准 JDBD应用程序接口为基于SQL的数据库访问提供了调用级别的应用程序接口 真实世界中的通用接口不幸的是 并不是所有数据库级别的命令都是ANSI 每个数据库平台都有自己的扩展功能 对于ANSI或者通用接口 一般来说都代表着几本功能 因此也可能意味着丧失了性能方面的竞争力 对于小型数据库和小型应用程序来说 要维护对数据库的通用访问是简单的 但是当数据库和/或应用程序变得越来越大 越来越复杂 你就不得不向代码中添加功能

  SQL Server和Oracle的常用函数对比

   数学函数

   绝对值

  S:select abs( ) value

  O:select abs( ) value from al

   取整(大) S:select ceiling( ) value O:select ceil( ) value from al

   取整(小)

  S:select floor( ) value O:select floor( ) value from al

   取整(截取)

  S:select cast( as int) value O:select trunc( ) value from al

   四舍五入S:select round( ) value O:select round( ) value from al

   e为底的幂S:select Exp( ) value O:select Exp( ) value from al

   取e为底的对数S:select log( ) value O:select ln( ) value from al;

   取 为底对数

  S:select log ( ) value

  O:select log( ) value from al;

   取平方

  S:select SQUARE( ) value

  O:select power( ) value from al

   取平方根

  S:select SQRT( ) value

  O:select SQRT( ) value from al

   求任意数为底的幂S:select power( ) value O:select power( ) value from al

   取随机数

  S:select rand() value

  O:select sys dbms_random value( ) value from al;

   取符号

  S:select sign( ) value

  O:select sign( ) value from al

   三角函数相关

   圆周率S:SELECT PI() value

  O:不知道

   sin cos tan 参数都以弧度为单位

  例如 select sin(PI()/ ) value得到 (SQLServer)

   Asin Acos Atan Atan 返回弧度

   弧度角度互换(SQLServer Oracle不知道)

  DEGREES 弧度 〉角度

  RADIANS 角度 〉弧度

   数值间比较

   求集合最大值

  S:select max(value) value from

  (select value

  union

  select value

  union

  select value

  union

  select value)a

  O:select greatest( ) value from al

   求集合最小值

  S:select min(value) value from

  (select value

  union

  select value

  union

  select value

  union

  select value)a

  O:select least( ) value from al

   如何处理null值(F 中的null以 代替) S:select F IsNull(F ) value from Tbl O:select F nvl(F ) value from Tbl

   字符串函数

   求字符序号

  S:select ascii( a ) value

  O:select ascii( a ) value from al

   从序号求字符

  S:select char( ) value

  O:select chr( ) value from al

   连接

  S:select + + value

  O:select CONCAT( )|| value from al

   子串位置 返回 S:select CHARINDEX( s sdsq ) value O:select INSTR( sdsq s ) value from al

   模糊子串的位置 返回 参数去掉中间%则返回 // 本文转自 C++Builder 研究 ?i= &d=dwn rn S:select patindex( %d%q% sdsfasdqe ) value O:oracle没发现 但是instr可以通过第四个参数控制出现次数select INSTR( sdsfasdqe sd ) value from al 返回

   求子串S:select substring( abcd ) value O:select substr( abcd ) value from al

   子串代替 返回aijklmnef S:SELECT STUFF( abcdef ijklmn ) value O:SELECT Replace( abcdef bcd ijklmn ) value from al

   子串全部替换

  S:Replace

  O:select Translate( fasdbfasegas fa 我 ) value from al

   长度S:len datalength

  O:length

   大小写转换 lower upper

   单词首字母大写

  S:没发现

  O:select INITCAP( abcd dsaf df ) value from al

   左补空格(LPAD的第一个参数为空格则同space函数)

  S:select space( )+ abcd value

  O:select LPAD( abcd ) value from al

   右补空格(RPAD的第一个参数为空格则同space函数)

  S:select abcd +space( ) value

  O:select RPAD( abcd ) value from al

   删除空格S:ltrim rtrim O:ltrim rtrim trim

   重复字符串S:select REPLICATE( abcd ) value

  O:没发现

   发音相似性比较(这两个单词返回值一样 发音相同) S:SELECT SOUNDEX ( Smith ) SOUNDEX ( Smythe ) O:SELECT SOUNDEX ( Smith ) SOUNDEX ( Smythe ) from al SQLServer中用SELECT DIFFERENCE( Smithers Smythers ) 比较soundex的差返回 为同音 最高

   日期函数

   系统时间

  S:select getdate() value

  O:select sysdate value from al

   前后几日

  直接与整数相加减

   求日期S:select convert(char( ) getdate() ) value

  O:select trunc(sysdate) value from al

  select to_char(sysdate yyyy mm dd ) value from al

   求时间S:select convert(char( ) getdate() ) value O:select to_char(sysdate hh :mm:ss ) value from al

   取日期时间的其他部分

  S:DATEPART和DATENAME函数(第一个参数决定)

  O:to_char函数第二个参数决定

  参数 下表需要补充

  year yy yyyy quarter qq q (季度) month mm m (m O无效) dayofyear dy y (O表星期) day dd d (d O无效) week wk ww (wk O无效)

  weekday dw (O不清楚)

  Hour hh hh hh (hh hh S无效) minute mi n (n O无效) second ss s (s O无效)

  millisecond ms (O无效)

  

   当月最后一天

  S:不知道

  O:select LAST_DAY(sysdate) value from al

   本星期的某一天(比如星期日)

  S:不知道

  O:SELECT Next_day(sysdate ) vaule FROM DUAL;

   字符串转时间

  S:可以直接转或者select cast( as datetime) value

  O:SELECT To_date( : : yyyy mm dd hh mi ss ) vaule FROM DUAL;

   求两日期某一部分的差(比如秒)

  S:select datediff(ss getdate() getdate()+ ) value O:直接用两个日期相减(比如d d = )

  SELECT (d d )* * * vaule FROM DUAL;

   根据差值求新的日期(比如分钟)

  S:select dateadd(mi getdate()) value

  O:SELECT sysdate+ / / vaule FROM DUAL;

   求不同时区时间

  S:不知道

  O:SELECT New_time(sysdate ydt gmt ) vaule FROM DUAL;

   时区参数 北京在东 区应该是Ydt

  AST ADT大西洋标准时间

  BST BDT白令海标准时间

  CST CDT中部标准时间

  EST EDT东部标准时间

  GMT格林尼治标准时间

  HST HDT阿拉斯加—夏威夷标准时间

  MST MDT山区标准时间

  NST纽芬兰标准时间

  PST PDT太平洋标准时间

  YST YDT YUKON标准时间

  Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:

  函数Oracle Microsoft SQL Server

  把字符转换为ASCII ASCII ASCII

  字串连接CONCAT (expressiοn + expressiοn)

  把ASCII转换为字符CHR CHAR

  返回字符串中的开始字符(左起)INSTR CHARINDEX

  把字符转换为小写LOWER LOWER

  把字符转换为大写UPPER UPPER

  填充字符串的左边LPAD N/A

  清除开始的空白LTRIM LTRIM

  清除尾部的空白RTRIM RTRIM

  字符串中的起始模式(pattern)INSTR PATINDEX

  多次重复字符串RPAD REPLICATE

  字符串的语音表示SOUNDEX SOUNDEX

  重复空格的字串RPAD SPACE

  从数字数据转换为字符数据TO_CHAR STR

  子串SUBSTR SUBSTRING

  替换字符REPLACE STUFF

  将字串中的每个词首字母大写INITCAP N/A

  翻译字符串TRANSLATE N/A

  字符串长度LENGTH DATELENGTH or LEN

  列表中最大的字符串GREATEST N/A

  列表中最小的字符串LEAST N/A

lishixin/Article/program/Oracle/201311/16561

OraclePL/SQL基础知识及其相关概念

结构化查询语言(Structured Query Language 简称SQL)是用来访问关系型数据库一种通用语言 属于*语言( GL) 其执行特点是非过程化 即不用指明执行的具体方法和途径 而是简单地调用相应语句来直接取得结果即可 显然 这种不关注任何实现细节的语言对于开发者来说有着极大的便利 然而 有些复杂的业务流程要求相应的程序来描述 这种情况下 GL就有些*为力了 Oracle L/SQL的出现正是为了解决这一问题 Oracle PL/SQL是一种过程化语言 属于第三代语言 它与C C++ Java等语言一样关注于处理细节 可以用来实现比较复杂的业务逻辑

一 编程基础知识

程序结构

Oracle PL/SQL程序都是以块(block)为基本单位 整个Oracle PL/SQL块分三部分 声明部分(用declare开头) 执行部分(以 begin开头)和异常处理部分(以exception开头) 其中执行部分是必须的 其他两个部分可选 无论Oracle PL/SQL程序段的代码量有多大 其基本结构就是由这三部分组成

控制结构

Oracle PL/SQL程序段中有三种程序结构 条件结构 循环结构和顺序结构

) 条件结构

与其它语言完全类似 语法结构如下

if condition then

statement

else

statement

end if ;

)循环结构

这一结构与其他语言不太一样 在PL/SQL程序中有三种循环结构

a loop … end loop;

b while condition loop … end loop;

c for variable in low_bound upper_bound loop … end loop;

其中的 … 代表循环体

)顺序结构

实际就是goto的运用 不过从程序控制的角度来看 尽量少用goto可以使得程序结构更加的清晰

变量声明与赋值

Oracle PL/SQL主要用于数据库编程 所以其所有的数据类型跟Oracle数据库里的字段类型是一一对应的 大体分为数字型 布尔型 字符型和日期型 这里简单介绍两种常用数据类型 number varchar

)number 用来存储整数和浮点数 范围为1e ~ e 其使用语法为 number[(precision scale)]

其中(precision scale)是可选的 precision表示所有数字的个数 scale表示小数点右边数字的个数

)varchar 用来存储变长的字符串 其使用语法为 varchar [(size)]

其中size为可选 表示该字符串所能存储的最大长度

在Oracle PL/SQL中声明变量与其他语言不太一样 它采用从右往左的方式声明 比如声明一个number类型的变量v_id 那其形式应为 v_id nunmer;

如果给上面的v_id变量赋值 不能用 = 应该用 := 即形式为:v_id := ;

SQL基本命令

PL/SQL使用的数据库操作语言还是基于SQL的 所以熟悉SQL是进行Oracle PL/SQL编程的基础 SQL语言的分类情况大致如下

) 数据定义语言(DDL) Create Drop Grant Revoke …

) 数据操纵语言(DML) Update Insert Delete …

) 数据控制语言(DCL) Commit Rollback Savapoint …

) 其他 Alter System Connect Allocate …

具体的语法结构可以参阅其他关于SQL语言的资料 这里不再赘述

二 过程与函数

Oracle PL/SQL中的过程和函数与其他语言的过程和函数一样 都是为了执行一定的任务而组合在一起的语句 过程无返回值 函数有返回值

其语法结构为

过程 Create or replace procere procname(参数列表) as PL/SQL语句块

函数 Create or replace function funcname(参数列表) return 返回值 as PL/SQL语句块

三 游标

游标的定义为 用游标来指代一个DML SQL操作返回的结果集 即当一个对数据库的查询操作返回一组结果集时 用游标来标注这组结果集 以后通过对游标的操作来获取结果集中的数据信息 这里特别提出游标的概念 是因为它在PL/SQL的编程中非常的重要 定义游标的语法结构如下 cursor cursor_name is SQL语句;

四 其他概念

Oracle PL/SQL中包的概念很重要 主要是对一组功能相近的过程和函数进行封装 类似于面向对象中的名字空间的概念

lishixin/Article/program/Oracle/201311/18883

    OraclePL/SQL基础知识及其相关概念

    结构化查询语言(Structured Query Language 简称SQL)是用来访问关系型数据库一种通用语言 属于*语言( GL) 其执行特点是非过程化 即不用指明执行的具体方法和途径 而是简单地调用相应语句来直接取得结果即可 显然 这种不关注任何实现细节的语言对于开发者来说有着极大的便利 然而 有些复杂的业务流程要求相应的程序来描述 这种情况下 GL就有些*为力了 Oracle L/SQL的出现正是为了解决这一问题 Oracle PL/SQL是一种过程化语言 属于第三代语言 它与C C++ Java等语言一样关注于处理细节 可以用来实现比较复杂的业务逻辑

    一 编程基础知识

    程序结构

    Oracle PL/SQL程序都是以块(block)为基本单位 整个Oracle PL/SQL块分三部分 声明部分(用declare开头) 执行部分(以 begin开头)和异常处理部分(以exception开头) 其中执行部分是必须的 其他两个部分可选 无论Oracle PL/SQL程序段的代码量有多大 其基本结构就是由这三部分组成

    控制结构

    Oracle PL/SQL程序段中有三种程序结构 条件结构 循环结构和顺序结构

    ) 条件结构

    与其它语言完全类似 语法结构如下

    if condition then

    statement

    else

    statement

    end if ;

    )循环结构

    这一结构与其他语言不太一样 在PL/SQL程序中有三种循环结构

    a loop … end loop;

    b while condition loop … end loop;

    c for variable in low_bound upper_bound loop … end loop;

    其中的 … 代表循环体

    )顺序结构

    实际就是goto的运用 不过从程序控制的角度来看 尽量少用goto可以使得程序结构更加的清晰

    变量声明与赋值

    Oracle PL/SQL主要用于数据库编程 所以其所有的数据类型跟Oracle数据库里的字段类型是一一对应的 大体分为数字型 布尔型 字符型和日期型 这里简单介绍两种常用数据类型 number varchar

    )number 用来存储整数和浮点数 范围为1e ~ e 其使用语法为 number[(precision scale)]

    其中(precision scale)是可选的 precision表示所有数字的个数 scale表示小数点右边数字的个数

    )varchar 用来存储变长的字符串 其使用语法为 varchar [(size)]

    其中size为可选 表示该字符串所能存储的最大长度

    在Oracle PL/SQL中声明变量与其他语言不太一样 它采用从右往左的方式声明 比如声明一个number类型的变量v_id 那其形式应为 v_id nunmer;

    如果给上面的v_id变量赋值 不能用 = 应该用 := 即形式为:v_id := ;

    SQL基本命令

    PL/SQL使用的数据库操作语言还是基于SQL的 所以熟悉SQL是进行Oracle PL/SQL编程的基础 SQL语言的分类情况大致如下

    ) 数据定义语言(DDL) Create Drop Grant Revoke …

    ) 数据操纵语言(DML) Update Insert Delete …

    ) 数据控制语言(DCL) Commit Rollback Savapoint …

    ) 其他 Alter System Connect Allocate …

    具体的语法结构可以参阅其他关于SQL语言的资料 这里不再赘述

    二 过程与函数

    Oracle PL/SQL中的过程和函数与其他语言的过程和函数一样 都是为了执行一定的任务而组合在一起的语句 过程无返回值 函数有返回值

    其语法结构为

    过程 Create or replace procere procname(参数列表) as PL/SQL语句块

    函数 Create or replace function funcname(参数列表) return 返回值 as PL/SQL语句块

    三 游标

    游标的定义为 用游标来指代一个DML SQL操作返回的结果集 即当一个对数据库的查询操作返回一组结果集时 用游标来标注这组结果集 以后通过对游标的操作来获取结果集中的数据信息 这里特别提出游标的概念 是因为它在PL/SQL的编程中非常的重要 定义游标的语法结构如下 cursor cursor_name is SQL语句;

    四 其他概念

    Oracle PL/SQL中包的概念很重要 主要是对一组功能相近的过程和函数进行封装 类似于面向对象中的名字空间的概念

    lishixin/Article/program/Oracle/201311/18883

      oracle查看所有表及各表行数

      在Oracle数据库中,查看所有表及对应个表的行数,只用一个select语句查询table_name和num_rows两个字段即可。table_name是表名,num_rows代表表的行数。

      具体如下:

      1、查询数据库所有的表sql:select t.table_name,t.num_rows from all_tables t;

      sql执行后的输出结果如下图:

      2、查询当前用户表sql:select t.table_name,t.num_rows from user_tables t;

      sql执行后输出结果如下图:

      扩展资料:

      分享一些ORACLE中,对所有表的查询sql:

      1、查询所有表名:

      select t.table_name from user_tables t;

      2、查询所有字段名:

      select t.column_name from user_col_comments t;

      3、查询指定表的所有字段名:

      select t.column_name from user_col_comments t where t.table_name = 'BIZ_DICT_XB';

      4、查询指定表的所有字段名和字段说明:

      select t.column_name, t.column_name from user_col_comments t where t.table_name = 'BIZ_DICT_XB';

      5、查询所有表的表名和表说明:

      select t.table_name,f.comments from user_tables t inner join user_tab_comments f on t.table_name = f.table_name;

      6、查询模糊表名的表名和表说明:

      select t.table_name from user_tables t where t.table_name like 'BIZ_DICT%';

      select t.table_name,f.comments from user_tables t inner join user_tab_comments f 

      on t.table_name = f.table_name where t.table_name like 'BIZ_DICT%';

      7、查询表的数据条数、表名、中文表名

      select a.num_rows, a.TABLE_NAME, b.COMMENTS from user_tables a,user_tab_comments b WHERE a.TABLE_NAME = b.TABLE_NAME  order by TABLE_NAME;

      参考资料来源:百度百科-Oracle PL/SQL宝典(第2版)

      参考资料来源:百度百科-Oracle数据库编程经典300例

      oracle数据库的常见命令

      1、su – oracle 不是必需,适合于没有DBA密码时使用,可以不用密码来进入sqlplus界面

      2、sqlplus /nolog 或sqlplus system/manager 或./sqlplus system/manager@ora9i

      3、SQL>connect / as sysdba ;(as sysoper)或connect internal/oracle AS SYSDBA (scott/tiger)conn sys/change_on_install as sysdba

      4、SQL>startup; 启动数据库实例

      5、 查看当前的所有数据库: select * from v$database

      扩展资料:

      ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。

      oracle数据库逻辑结构

      它由至少一个表空间和数据库模式对象组成。这里,模式是对象的集合,而模式对象是直接引用数据库数据的逻辑结构。

      模式对象包括这样一些结构:表、视图、序列、存储过程、同义词、索引、簇和数据库链等。逻辑存储结构包括表空间、段和范围,用于描述怎样使用数据库的物理空间。

      文件结构

      数据库的物理存储结构是由一些多种物理文件组成,主要有数据文件、控制文件、重做日志文件、归档日志文件、参数文件、口令文件、警告文件等。

      参考资料来源:百度百科-Oracle数据库

      显示全文