您的位置:首页 > 数据库 > Oracle

oracle常用知识点

2011-12-19 16:46 344 查看
1 sql的字符串里出现单引号怎么转义?

用两个单引号

insertinto mw_app.mwt_ud_jgdx_dxxmk (obj_id,obj_dispidx,xmmc,xmghsj,znhbdz) values(

'5B82E8F6-6EE6-460A-8389-7DF16E61229E'||'-00211',mw_sys.mwq_obj_dispidx.nextval,'项目''名称',to_date('2010-12-22','yyyy-MM-dd'),1)

SQL中的单引号转化为双单引号---利用正则表达式-

{

if(sql!= null && sql != "")//SQL中的单引号转化为双单引号

{

var reg=new RegExp("'","g");

sql=sql.replace(reg,"''");

}

2 生成1到100之间的随机数(整数)

selectround(dbms_random.value(100,1)) fromdual;

3 生成随机数的几种方式

selectdbms_random.normal from dual

select DBMS_RANDOM.RANDOM()

from dual;

selectdbms_random.value(100,1) from dual

4 批量插入2000条数据

insertinto mw_app.MWT_UD_SBD_BDZ_FF(obj_id,obj_dispidx,

YXBM,dydj,ts,BDZZJ,dydjfw,tyrq)

selectmw_sys.newguid||'-'||substr('0000'||rownum,-5,5),mw_sys.mwq_obj_dispidx.nextval,

decode(round(dbms_random.value(3,1)),1,'杭州',2,'湖州','嘉兴'),

decode(round(dbms_random.value(3,1)),1,'110',2,'220','500'),

round(dbms_random.value(100,1)) ,'111','dydjfw',

to_date(round(dbms_random.value(2010,2004))||'-'||round(dbms_random.value(12,1))||'-'||round(dbms_random.value(28,1)),'yyyy-MM-dd')

from mw_sys.mwt_om_obj where rownum<=2000

5 怎样用Sql语句实现查找一列中第N大值?

select* from

(selectt.*,dense_rank() over (order by sal) rank from employee)

whererank = N;

6 Oracle GUID生成

selectsys_guid() from dual

PI3000GUID生成

createor replace function newGuid return varchar2 is

Resultvarchar2(42);

begin

selectsys_guid() into Result from dual where rownum=1;

Result:=substr(Result,1,8)||'-'||substr(Result,9,4)||'-'||substr(Result,13,4)||'-'||

substr(Result,17,4)||'-'||substr(Result,21,12);

return(Result);

endnewGuid;

7 临时表提交的时候自动清除数据

create GLOBAL TEMPORARY TABLE mw_app.mwt_ud_dxxmk_temp(objID varchar(42)) on commit delete rows;

8 查看数据表中某个字段的建立时间

9 with check option

with check option子句会促使所有的数据更改语句(对视图执行)遵守select语句(定义视图)确定的标准。在使用该子句时,

行不能被更改,否则会使他们在视图中消失。任何可能导致这种情况的改动都会被取消并显示一条异常。

例如:定义一个查看跨区电网项目的视图

createor replace view mw_app.mwv_jgdx_kqdw as

selectxmk.*

from mw_app.MWT_UD_JGDX_DXXMK xmk

where xmk.sfkqdwxm='T'

with check option;

/

(1)在执行下面的update的时候,会弹出如下图所示的异常:ORA-01402:视图with check option where 子句违规

updatemw_app.mwv_jgdx_kqdw

set sfkqdwxm = 'F'

whereobj_id in ('0524FFBF-6093-40D4-8750-8D546C01AD26-00002',

'93A90BC5-96F5-46E0-B761-870C9D8ACE4E-02299');

(2)但是当执行,下面的update的时候,可以正常的进行

updatemw_app.mwv_jgdx_kqdw

set sfnw = 'F'

whereobj_id in ('0524FFBF-6093-40D4-8750-8D546C01AD26-00002',

'93A90BC5-96F5-46E0-B761-870C9D8ACE4E-02299');

10 删除重复记录

最高效的删除重复记录的方法(因为使用了rowid)

例:mw_app.mwt_ud_test表,表结构如下

表中的数据如下:

如何实现只保留一个subject 为‘物理’的数据?

deletefrom mw_app.mwt_ud_test test1

where test1.rowid>(select min(test2.rowid)

from mw_app.mwt_ud_test test2

where test2.subject=test1.subject)

11 过滤条件(???????)

cast(substr(lsy,0, decode(instr(lsy, ','), 0, length(lsy), (instr(lsy, ',')-1))) as integer)

12 找出低效SQL的小工具(?????)

 SELECTEXECUTIONS , DISK_READS, BUFFER_GETS,ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio,

ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run, SQL_TEXT

  FROMV$SQLAREA  

  WHEREEXECUTIONS>0

  ANDBUFFER_GETS > 0   

  AND(BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8   

  ORDERBY 4 DESC;

13 从日期中取得年、月、日

selectextract(year from to_date( '2010-11-12' ,'yyyy-mm-dd')) as jhnd from dual

selectextract(year from to_date( '2010-11-12' ,'yyyy-mm-dd')) as 年 from dual

selectextract(month from to_date( '2010-11-12' ,'yyyy-mm-dd')) as 月 from dual

selectextract(day from to_date( '2010-11-12' ,'yyyy-mm-dd')) as 日 from dual

14 <fmt:formatDate

<fmt:formatDatevalue="${person.user.expireTime }"pattern="yyyy-MM-dd"/></td>

17 HQL不支持,SQL支持的&运算

selectresourceSn,aclState&1,aclState&2,aclState&4,aclState&8,aclTriStatefrom T_ACL where principalType ='User';//????

18实现两个表这间字段复制的两种方法比较

1.INSERT INTO SELECT语句

语句形式为:Insert into Table2(field1,field2,...) selectvalue1,value2,... from Table1

要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。

2.SELECT INTO FROM语句 [在pl/sql中无法执行,报缺失关键字的错误]?????

语句形式为:SELECT vale1, value2 into Table2 from Table1

要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。

19 ORA-01754: 表只能包含一个LONG 类型的列()

createtable T_Workflow (id number(10,0) not null, name varchar2(255 char) unique,processDefinition long raw, processImage long raw, primary key (id))

ORA-01754:表只能包含一个 LONG 类型的列

====

,Oracle数据库一个表中只能包含一个 LONG TYPE的列。

20 nvl2(jlbz,'已导入计划','未导入计划')

selectnvl2(jlbz,'已导入计划','未导入计划') sfydr from mw_app.mwt_ud_jgdx_dxxmk where kb='4'

21 create table ….. Asselect * from ...是一种什么样的建表方式?

这种建表方式,不能带入初始值?物理表的初始值是怎么回事儿?

22 表中记录的更改,是如何

23 Oracle-修改时间显示格式

2010-05-25

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明

http://an0420.blogbus.com/logs/64286827.html

查看当前oracle时间的格式

select * from nls_session_parameters where parameter = ‘NLS_DATE_FORMAT’;

修改当前session的format

alter session set NLS_DATE_FORMAT=’YYYY-MM-DD HH24:MI:SS’;

windows修改时间格式并保存

客户端的注册表HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->HOME0中,如无默认的日期格式,则“新建”->“字符串”,重命名为“NLS_DATE_FORMAT”(注意引号内的字符应大写),并赋值为如:yyyy-mm-dd hh24:mi:ss, 可直接使用,而不需要重启Oracle。

源文档<http://an0420.blogbus.com/logs/64286827.html>

24查看mw_app.mwt_ud_jgdx_dxxmk的建表信息,最后修改时间,创建时间

select objs.object_name,objs.subobject_name,objs.object_id

,objs.data_object_id,objs.object_type,objs.created as 创建时间

,objs.last_ddl_time as 最后修改时间,objs.timestamp,objs.status

,objs.temporary,objs.generated,objs.secondary

from user_objects objs

whereobject_type='TABLE' andobject_name='MWT_UD_JGDX_DXXMK';

【必须使用mw_app用户进行该查询,否则无法查询出结果,因为查询的是当前用户的所有对象;oracle在对于字段值得比较方面是区分大小写的,所以,where条件后的obj_name值一定要为大写】

25 对数据表列的更改

--新建一列,用于备份数据

altertable MW_APP.MWT_UD_SBDJX_JYZDZFYMDCLJL add BF INTEGER;

--将修改列的数据备份到BF列

updateMW_APP.MWT_UD_SBDJX_JYZDZFYMDCLJL set BF=PJZ;

--删除备份列

altertable MW_APP.MWT_UD_SBDJX_JYZDZFYMDCLJL drop column PJZ;

26、

selectto_char(sysdate,'Q') from dual;---第几季度

selectto_char(sysdate,'MM') from dual;---当前为几月 结果为:07的格式

selectto_char(sysdate,'Month') from dual;---当前为几月结果为:7月 的格式

selectto_char(sysdate,'WW') from dual;--当年第几周

selectto_char(sysdate,'W') from dual;---本月第几周

selectto_char(sysdate,'DDD') from dual;---当年第几天,1月1日为001,2月1日为032

selectto_char(sysdate,'D') from dual;-- 周内第几天 周四为:5

selectto_char(sysdate,'DY') from dual;-- 周内第几天 周四为:星期四
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: