oracle函数

Oracle中case when函数和decode函数

假如想象 提交于 2020-01-22 05:07:09
1、case when函数: select ename,case deptno when 10 then 'ACCOUNTING' when 20 then 'RESEARCH' else 'SALES' end from emp; select ename,case when deptno=10 then 'ACCOUNTING' when deptno=20 then 'RESEARCH' else 'SALES' end from emp; 以上两种写法均可。 2、decode函数: select ename,decode(deptno,10,'ACCOUNTING',20,'RESEARCH',30,'SALES','OTHERS') from emp; 来源: CSDN 作者: nishuai519119 链接: https://blog.csdn.net/nishuai519119/article/details/85001926

数据库迁移--《oracle迁移到ppas》

醉酒当歌 提交于 2020-01-21 16:00:45
1. 所有SQL语句中表名和字段不要带双引号。表名或字段带双引号时,表示区分大小写,如果数据库中表名是test,sql语句是update “TEST” set name=’1’,会提示没有TEST这个表 2. 建表语句varchar2类型长度后不能有BYTE或CHAR CREATE TABLE DT_AUDITRECORD ( ID VARCHAR2(36 BYTE) NOT NULL ); CREATE TABLE DT_AUDITRECORD ( ID VARCHAR2(36 CHAR) NOT NULL ) 应该为 CREATE TABLE DT_AUDITRECORD ( ID VARCHAR2(36) NOT NULL ) 3. 添加字段时字段名及类型不需要用小括号括起来 ALTER TABLE TB_POWERWARNRESPONSE ADD (PWR_ISCOMPANY NUMBER); 应该为 ALTER TABLE TB_POWERWARNRESPONSE ADD PWR_ISCOMPANY NUMBER; 4. 加字段时不支持一条语句添加多个多段,要分开执行 ALTER TABLE TB_POWERWARNRESPONSE ADD PWR_ISCOMPANY NUMBER ADD PWR_COMPANYNAME VARCHAR2(300); 要分成多条语句

在oracle中,select语句查询字段中非纯数字值

自作多情 提交于 2020-01-19 09:18:19
最近,将原来的数字符字段转换为数字时,总报错误:无效数字。 如何找出其中哪些是非数字字符的记录?比较麻烦的事。下面是用Oracle DB自带的函数translate可以找出来的 1.创建测试表 Create Table TestChar( ITEM_NUMBER VARCHAR2(20) ); 2.手工插入测试记录 Insert Into TestChar (ITEM_NUMBER) values ('312'); Insert Into TestChar (ITEM_NUMBER) values ('312'); Insert Into TestChar (ITEM_NUMBER) values ('4412'); Insert Into TestChar (ITEM_NUMBER) values ('152'); Insert Into TestChar (ITEM_NUMBER) values ('162'); Insert Into TestChar (ITEM_NUMBER) values ('172'); Insert Into TestChar (ITEM_NUMBER) values ('142'); Insert Into TestChar (ITEM_NUMBER) values ('142'); Insert Into TestChar (ITEM

oracle中问题处理

ぃ、小莉子 提交于 2020-01-19 05:16:01
之前用的大都是mysql数据库,但是现在所处公司用的数据库是oracle,在开发过程中遇到不少麻烦,因为之前mysql可以用的函数在oracle里面不适用,所以以下将研究在平时在开发过程中所遇到的oracle的sql编写过程,将一些遇到的难题记录下,在以后的开发过程中减少麻烦,以免四处求助却没有效果。 1、一个code对应多个开始时间(begindate),按code分组查询,如果一组里面的begindate中包含今天的时间,我就取出这一组的sysdate作为begindate,如果不包含,我就取出min(begindate)。 select R1.code,R1.max_time,R1.min_time,R1.time_set,FIND_IN_SET(sysdate,R1.time_set) as isContainSysTime, case when "sysdate(从前台获取当前时间字符串)" like isContainSysTim then to_char(sysdate,'yyyy-mm-dd') ELSE to_char(min_time,'yyyy-mm-dd') end as begin_time from ( select code, ws_concat(begin_time) as time_set, min(begin_time) as min_time,

Oracle 中 decode 函数用法

邮差的信 提交于 2020-01-19 03:49:51
含义解释: decode (条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN     RETURN(翻译值1) ELSIF 条件=值2 THEN     RETURN(翻译值2)     ...... ELSIF 条件=值n THEN     RETURN(翻译值n) ELSE     RETURN(缺省值) END IF decode (字段或字段的运算,值1,值2,值3) 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3 当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多 使用方法: 1、比较大小 select decode (sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值 sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1 例如: 变量1=10,变量2=20 则sign(变量1-变量2)返回-1, decode 解码结果为“变量1”,达到了取较小值的目的。 2、此函数 用在 SQL 语句中 ,功能介绍如下: Decode 函数与一系列嵌套的 IF-THEN-ELSE语句相似。base_exp与compare1,compare2等等依次进行比较。如果base_exp和 第i 个compare项匹配

SGA_MAX_SIZE,SGA_TARGET以及PRE_PAGE_SGA参数

懵懂的女人 提交于 2020-01-19 03:40:19
10g引入ASMM后SGA_TARGET取代shared_pool_size,db_cache_size等参数,成为DBA关注的主要SGA内存管理参数;有不少情况下SGA_TARGET参数会设置为一个小于SGA_MAX_SIZE的值(这样做在多实例情况下更具灵活性)。但不少人会问,这样岂不是要浪费一部分物理内存吗?Oracle会为实例分配SGA_MAX_SIZE大小的内存的,SGA_TARGET要设得和SGA_MAX_SIZE一样大才合理啊! 让我们来看看实际的情况: SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi PL/SQL Release 10.2.0.4.0 - Production CORE 10.2.0.4.0 Production TNS for Linux: Version 10.2.0.4.0 - Production NLSRTL Version 10.2.0.4.0 - Production /* linux上的10.2.0.4 */ SQL> show parameter

Oracle学习笔记—connect、resource和dba三种权限(转载)

Deadly 提交于 2020-01-18 09:10:08
一、Oracle数据字典   数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的。比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息等。当用户在对数据库中的数据进行操作时遇到困难就可以访问数据字典来查看详细的信息。   Oracle中的数据字典有静态和动态之分。静态数据字典主要是在用户访问数据字典时不会发生改变的,但动态数据字典是依赖数据库运行的性能的,反映数据库运行的一些内在信息,所以在访问这类数据字典时往往不是一成不变的。以下分别就这两类数据字典来论述。   1.静态数据字典   这类数据字典主要是由表和视图组成,应该注意的是,数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*、 all_*、 dba_*。   user_*:该视图存储了关于当前用户所拥有的对象的信息。(即所有在该用户模式下的对象)   all_*:该试图存储了当前用户能够访问的对象的信息。(与user_*相比,all_* 并不需要拥有该对象,只需要具有访问该对象的权限即可)   dba_*:该视图存储了数据库中所有对象的信息。(前提是当前用户具有访问这些数据库的权限,一般来说必须具有管理员权限)   从上面的描述可以看出,三者之间存储的数据肯定会有重叠,其实它们除了访问范围的不同以外

(学习笔记)Oracle存储过程、存储函数

为君一笑 提交于 2020-01-18 06:16:02
Oracle存储过程和存储函数都是数据库对象,他们都是一段可执行的程序,存储过程没有返回值,存储函数有返回值 存储过程——语法:     create or replace procedure 存储过程名(参数列表)  //创建或替换存储过程(已存在就替换,否则就新建,参数列表可以为空)     as         //说明或声明部分     brgin       //程序体     end;    执行上述代码会有一条以编译的提示,接下来就可以进行调用    调用方式: 1.执行 exec 存储过程名+();         2.begin           存储过程名+();   //调用一次           存储过程名+();    /在调用一次         end;  自行一个带参数的存储过程   建表 create table employee (in number(3,0) pormary key, name nvarchar2(3), salary number(7,2)); 插入一条测试数据 insert into employee (1,'大明',4500);   create or replace procedure raiseSalary(eno number)  //创建名为raiseSalary的储存过程,接受一个员工id参数   as   

PL/SQL性能优化

ⅰ亾dé卋堺 提交于 2020-01-17 21:31:43
一:SQL性能优化原理 1.1sql处理体系结构 1.2执行计划 sql语句转换前的步骤: 1.语法检查:检查sql语句的拼写是否正确 2.语义分析:核实所有与数据字典不一致的表或列的名字 3.概要存储检查:检查数据字典,以确定该sql语句的概要信息是否已经存在 4.生产执行计划:使用CBO规则和数据字典中的统计表来决定最佳执行计划 5.生成二进制代码:基于执行计划,生成可执行代码 执行计划是oracle在执行每个sql语句时所采取的执行顺序. 执行计划包括: 1.语句所引用的表的顺序 2.语句所设计的表的访问方式 3.语句中连续操作所影响到的各表的连接方法 查看计划前授权: --系统用户执行 SQL > @D :\Oracle\app\oracle\product\ 10.2 .0 \server\RDBMS\ADMIN\utlxplan . sql ; --本地电脑路径,执行utlxplan.sql Table created Executed in 0.047 seconds SQL > grant plustrace to scott ; --授权 Grant succeeded Executed in 0.009 seconds --scott用户 SQL > @D :\Oracle\app\oracle\product\ 10.2 .0 \server\RDBMS

Oracle存储函数,存储过程

坚强是说给别人听的谎言 提交于 2020-01-17 05:48:48
一、Oracle存储函数:存储的PL/SQL语法块,完成特定的功能。 1、语法: 函数关键字: function (1)创建函数 CREATE [OR REPLACE] FUNCTION <function name> [(param1,param2)] RETURN <datatype> IS|AS [local declarations] declare ..... BEGIN Executable Statements; RETURN result; EXCEPTION Exception handlers; END; (2)调用函数 --调用 --1.写查询调用 select fun1 from dual; --2.PL/SQL语法块调用 declare my_name varchar2(20); begin my_name := fun1; dbms_output.put_line(my_name); end; 2、函数的参数模式 (1)输入参数 in: --有参的函数 create or replace function fun2(s_id number) return varchar2 as t_name varchar2(20); begin   select sname into t_name from stu where sid = s_id;   return