ORACLE常用的SQL语法和数据对象一.数据控制语句(DML)部分
1.INSERT(往数据表里插入记录的语句)
INSERTINTO表名(字段名1,字段名2,……)VALUES(值1,值2,……);INSERTINTO表名(字段名1,字段名2,……)SELECT(字段名1,字段名2,……)FROM另外的表名;
字符串类型的字段值必须用单引号括起来,例如:’GOODDAY’如果字段值里包含单引号’需要进行字符串转换,我们把它替换成两个单引号''.字符串类型的字段值超过定义的长度会出错,最好在插入前进行长度校验.
INSERT时最大可操作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包.
INSERT时如果要用到从1开始自动增长的序列号,应该先建立一个序列号CREATESEQUENCE序列号的名称(最好是表名+序列号标记)INCREMENTBY1STARTWITH1MAXVALUE99999CYCLENOCACHE;其中最大的值按字段的长度来定,如果定义的自动增长的序列号NUMBER(6),最大值为999999INSERT语句插入这个字段值为:序列号的名称.NEXTVAL
2.DELETE(删除数据表里记录的语句)
DELETEFROM表名WHERE条件;
注意:删除记录并不能释放ORACLE里被占用的数据块表空间.它只把那些被删除的数据块标成unused.
如果确实要删除一个大表里的全部记录,可以用TRUNCATE命令,它可以释放占用的数据块表空间TRUNCATETABLE表名;此操作不可回退.
3.UPDATE(修改数据表里记录的语句)
UPDATE表名SET字段名1=值1,字段名2=值2,……WHERE条件;
如果修改的值N没有赋值或定义时,将把原来的记录内容清为NULL,最好在修改前进行非空校验;值N超过定义的长度会出错,最好在插入前进行长度校验..
注意事项:A.以上SQL语句对表都加上了行级锁,确认完成后,必须加上事物处理结束的命令COMMIT才能正式生效,否则改变不一定写入数据库里.如果想撤回这些操作,可以用命令ROLLBACK复原.
B.在运行INSERT,DELETE和UPDATE语句前最好估算一下可能操作的记录范围,应该把它限定在较小(一万条记录)范围内,.否则ORACLE处理这个事物用到很大的回退段.程序响应慢甚至失去响应.如果记录数上十万以上这些操作,可以把这些SQL语句分段分次完成,其间加上COMMIT确认事物处理.二.数据定义(DDL)部分1.CREATE(创建表,索引,视图,同义词,过程,函数,数据库链接等)
ORACLE常用的字段类型有CHAR固定长度的字符串VARCHAR2可变长度的字符串NUMBER(M,N)数字型M是位数总长度,N是小数的长度DATE日期类型
创建表时要把较小的不为空的字段放在前面,可能为空的字段放在后面
创建表时可以用中文的字段名,但最好还是用英文的字段名
创建表时可以给字段加上约束条件例如不允许重复UNIQUE,关键字PRIMARYKEY
2.ALTER(改变表,索引,视图等)
改变表的名称ALTERTABLE表名1TO表名2;
在表的后面增加一个字段ALTERTABLE表名ADD字段名字段名描述;
修改表里字段的定义描述ALTERTABLE表名MODIFY字段名字段名描述;
给表里的字段加上约束条件ALTERTABLE表名ADDCONSTRAINT约束名PRIMARYKEY(字段名);ALTERTABLE表名ADDCONSTRAINT约束名UNIQUE(字段名);
把表放在或取出数据库的内存区ALTERTABLE表名CACHE;ALTERTABLE表名NOCACHE;
3.DROP(删除表,索引,视图,同义词,过程,函数,数据库链接等)
删除表和它所有的约束条件DROPTABLE表名CASCADECONSTRAINTS;
4.TRUNCATE(清空表里的所有记录,保留表的结构)
TRUNCATE表名;
三.查询语句(SELECT)部分SELECT字段名1,字段名2,……FROM表名1,[表名2,……]WHERE条件;
字段名可以带入函数例如:COUNT(*),MIN(字段名),MAX(字段名),AVG(字段名),DISTINCT(字段名),TO_CHAR(DATE字段名,'YYYY-MM-DDHH24:MI:SS')
NVL(EXPR1,EXPR2)函数解释:IFEXPR1=NULLRETURNEXPR2ELSERETURNEXPR1
DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数解释:IFAA=V1THENRETURNR1IFAA=V2THENRETURNR2..…ELSERETURNNULL
LPAD(char1,n,char2)函数解释:字符char1按制定的位数n显示,不足的位数用char2字符串替换左边的空位
字段名之间可以进行算术运算例如:(字段名1*字段名1)/3
查询语句可以嵌套例如:SELECT……FROM(SELECT……FROM表名1,[表名2,……]WHERE条件)WHERE条件2;
两个查询语句的结果可以做集合操作例如:并集UNION(去掉重复记录),并集UNIONALL(不去掉重复记录),差集MINUS,交集INTERSECT
分组查询SELECT字段名1,字段名2,……FROM表名1,[表名2,……]GROUPBY字段名1[HAVING条件];
两个以上表之间的连接查询
SELECT字段名1,字段名2,……FROM表名1,[表名2,……]WHERE表名1.字段名=表名2.字段名[AND……];
SELECT字段名1,字段名2,……FROM表名1,[表名2,……]WHERE表名1.字段名=表名2.字段名(+)[AND……];
有(+)号的字段位置自动补空值
查询结果集的排序操作,默认的排序是升序ASC,降序是DESC
SELECT字段名1,字段名2,……FROM表名1,[表名2,……]ORDERBY字段名1,字段名2DESC;
字符串模糊比较的方法
INSTR(字段名,‘字符串’)>0字段名LIKE‘字符串%’[‘%字符串%’]
每个表都有一个隐含的字段ROWID,它标记着记录的唯一性.
四.ORACLE里常用的数据对象(SCHEMA)1.索引(INDEX)
CREATEINDEX索引名ON表名(字段1,[字段2,……]);ALTERINDEX索引名REBUILD;
一个表的索引最好不要超过三个(特殊的大表除外),最好用单字段索引,结合SQL语句的分析执行情况,也可以建立多字段的组合索引和基于函数的索引
ORACLE8.1.7字符串可以索引的最大长度为1578单字节ORACLE8.0.6字符串可以索引的最大长度为758单字节
2.视图(VIEW)
CREATEVIEW视图名ASSELECT….FROM…..;ALTERVIEW视图名COMPILE;
视图仅是一个SQL查询语句,它可以把表之间复杂的关系简洁化.
3.同义词(SYNONMY)CREATESYNONYM同义词名FOR表名;CREATESYNONYM同义词名FOR表名@数据库链接名;
4.数据库链接(DATABASELINK)CREATEDATABASELINK数据库链接名CONNECTTO用户名IDENTIFIEDBY密码USING‘数据库连接字符串’;
数据库连接字符串可以用NET8EASYCONFIG或者直接修改TNSNAMES.ORA里定义.
数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样
数据库全局名称可以用以下命令查出SELECT*FROMGLOBAL_NAME;
查询远端数据库里的表SELECT……FROM表名@数据库链接名;
五.权限管理(DCL)语句1.GRANT赋于权限常用的系统权限集合有以下三个:CONNECT(基本的连接),RESOURCE(程序开发),DBA(数据库管理)常用的数据对象权限有以下五个:ALLON数据对象名,SELECTON数据对象名,UPDATEON数据对象名,DELETEON数据对象名,INSERTON数据对象名,ALTERON数据对象名
GRANTCONNECT,RESOURCETO用户名;GRANTSELECTON表名TO用户名;GRANTSELECT,INSERT,DELETEON表名TO用户名1,用户名2;
2.REVOKE回收权限
REVOKECONNECT,RESOURCEFROM用户名;REVOKESELECTON表名FROM用户名;REVOKESELECT,INSERT,DELETEON表名FROM用户名1,用户名2;
查询数据库中第63号错误:selectorgaddr,destaddrfromsm_histable0116whereerror_code='63';
查询数据库中开户用户最大提交和最大下发数:selectMSISDN,TCOS,OCOSfromms_usertable;
查询数据库中各种错误代码的总和:selecterror_code,count(*)fromsm_histable0513groupbyerror_codeorderbyerror_code;
查询报表数据库中话单统计种类查询。selectsum(Successcount)fromtbl_MiddleMt0411whereServiceType2=111selectsum(successcount),servicetypefromtbl_middlemt0411groupbyservicetype
oracle常用SQL语句
minus运算返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。有哪些工种在财会部中有,而在销售部中没有?exp:selectjobfromaccountminusselectjobfromsales;1.oracle安装完成后的初始口令internal/oraclesys/change_on_installsystem/managerscott/tigersysman/oem_temp
2.oracle9iaswebcache的初始默认用户和密码?administrator/administrator
3.oracle8.0.5怎么创建数据库用orainst。假如有motif界面,可以用orainst/m
4.oracle8.1.7怎么创建数据库dbassist
5.oracle9i怎么创建数据库dbca
6.oracle中的裸设备指的是什么裸设备就是绕过文件系统直接访问的储存空间
7.oracle如何区分64-bit/32bit版本???$sqlplus'/assysdba'sql*plus:release9.0.1.0.0-productiononmonjul1417:01:092003(c)copyright2001oraclecorporation.allrightsreserved.connectedto:oracle9ienterpriseeditionrelease9.0.1.0.0-productionwiththepartitioningoptionjserverrelease9.0.1.0.0-productionsql>select*fromv$version;banner----------------------------------------------------------------oracle9ienterpriseeditionrelease9.0.1.0.0-productionpl/sqlrelease9.0.1.0.0-productioncore9.0.1.0.0productiontnsforsolaris:version9.0.1.0.0-productionnlsrtlversion9.0.1.0.0-productionsql>
8.svrmgr什么意思?svrmgrl,servermanager.9i下没有,已经改为用sqlplus了sqlplus/nolog变为归档日志型的
9.请问如何分辨某个用户是从哪台机器登陆oracle的selectmachine,terminalfromv$session;
10.用什么语句查询字段呢?desctable_name可以查询表的结构selectfield_name,...from...可以查询字段的值select*fromall_tableswheretable_namelike'%'select*fromall_tab_columnswheretable_name=''
11.怎样得到触发器、过程、函数的创建脚本?descuser_sourceuser_triggers
12.怎样计算一个表占用的空间的大小?selectowner,table_name,num_rows,blocks*aaa/1024/1024"sizem",empty_blocks,last_analyzedfromdba_tableswheretable_name='xxx';here:aaaisthevalueofdb_block_size;xxxisthetablenameyouwanttocheck
13.如何查看最大会话数?select*fromv$parameterwherenamelike'proc%';sql>sql>showparameterprocessesnametypevalue-------------------------------------------------------------------------aq_tm_processesinteger1db_writer_processesinteger1job_queue_processesinteger4log_archive_max_processesinteger1processesinteger200这里为200个用户。select*fromv$license;其中sessions_highwater纪录曾经到达的最大会话数
15.如何以archivelog的方式运行oracle。init.oralog_archive_start=truerestartdatabase
16.怎么获取有哪些用户在使用数据库selectusernamefromv$session;
17.数据表中的字段最大数是多少表或视图中的最大列数为1000
18.怎样查得数据库的sidselectnamefromv$database;也可以直接查看init.ora文件
19.如何在oracle服务器上通过sqlplus查看本机ip地址selectsys_context('userenv','ip_address')fromdual;假如是登陆本机数据库,只能返回127.0.0.1,呵呵
21.在oracletable中如何抓取memo类型字段为空的数据记录selectremarkfromoms_flowrecwheretrim(''fromremark)isnotnull;
22.如何用bbb表的数据去更新aaa表的数据(有关联的字段)up2003-10-17aaasetbns_snm=(selectbns_snmfrombbbwhereaaa.dpt_no=bbb.dpt_no)wherebbb.dpt_noisnotnull;
23.p4计算机安装方法将symcjit.dll改为sysmcjit.old
24.何查询server是不是opsselect*fromv$option;假如parallelserver=true则有ops能
25.何查询每个用户的权限select*fromdba_sys_privs;
26.如何将表移动表空间altertabletable_namemovetablespace_name;
27.如何将索引移动表空间alterindexindex_namerebuildtablespacetablespace_name;
28.在linux,unix下如何启动dbastudiooemappdbastudio
29.查询锁的状况的对象有v$lock,v$locked_object,v$session,v$sqlarea,v$process;查询锁的表的方法:selects.sidsession_id,s.username,decode(lmode,0,'none',1,'null',2,'row-s(ss)',3,'row-x(sx)',4,'share',5,'s/row-x(ssx)',6,'exclusive',to_char(lmode))mode_held,decode(request,0,'none',1,'null',2,'row-s(ss)',3,'row-x(sx)',4,'share',5,'s/row-x(ssx)',6,'exclusive',to_char(request))mode_requested,o.ccbzzp||'.'||o.object_name||'('||o.object_type||')',s.typelock_type,l.id1lock_id1,l.id2lock_id2fromv$lockl,sys.dba_objectso,v$sessionswherel.sid=s.sidandl.id1=o.object_id;
30.如何解锁altersystemkillsession‘sid,serir#’;
31.sqlplus下如何修改编辑器define_editor=""--必须加上双引号来定义新的编辑器,也可以把这个写在$oracle_home/sqlplus/admin/glogin.sql里面使它永久有效。
32.oracle产生随机函数是dbms_random.random
33.linux下查询磁盘竞争状况命令sar-d
33.linux下查询cpu竞争状况命令sar-r
34.查询当前用户对象select*fromuser_objects;select*fromdba_segments;
35.如何获取错误信息select*fromuser_errors;
36.如何获取链接状况select*fromdba_db_links;
37.查看数据库字符状况select*fromnls_database_parameters;select*fromv$nls_parameters;
38.查询表空间信息select*fromdba_data_files;
39.oracle的interal用户要口令修改sqlnet.orasqlnet.authentication_services=(nts)
41.如何给表、列加注释?sql>commentontable表is'表注释';注释已创建。sql>commentoncolumn表.列is'列注释';注释已创建。sql>select*fromuser_tab_commentswherecommentsisnotnull;
42.如何查看各个表空间占用磁盘情况?sql>coltablespaceformata20sql>selectb.file_id文件id号,b.tablespace_name表空间名,b.bytes字节数,(b.bytes-sum(nvl(a.bytes,0)))已使用,sum(nvl(a.bytes,0))剩余空间,sum(nvl(a.bytes,0))/(b.bytes)*100剩余百分比fromdba_free_spacea,dba_data_filesbwherea.file_id=b.file_idgroupbyb.tablespace_name,b.file_id,b.bytesorderbyb.file_id43.如把oracle设置为mts或专用模式?#dispatchers="(protocol=tcp)(service=sidxdb)"加上就是mts,注释就是专用模式,sid是指你的实例名。
44.如何才能得知系统当前的scn号selectmax(ktuxescnw*power(2,32)+ktuxescnb)fromx$ktuxe;
45.请问如何在oracle中取毫秒9i之前不支持,9i开始有timestamp.9i可以用selectsystimestampfromdual;
__________________风起云涌,一锅稀饭。人生苦闷,开心就行。
向版主反映这个帖子|ip:已记录10-13-0301:20
开心果资深会员
注册日期:aug2003来自:福建发帖数:525大家在应用oracle的时候可能会碰到很多看起来不难的问题,非凡对新手来说,今天我简单把它总结一下,发布给大家,希望对大家有帮助!和大家一起探讨,共同进步!
对oracle高手来说是不用看的.
46.如何在字符串里加回车?select'welcometovisit'||chr(10)||'www.csdn.net'fromdual;
47.中文是如何排序的?oracle9i之前,中文是按照二进制编码进行排序的。在oracle9i中新增了按照拼音、部首、笔画排序功能。设置nls_sort值schinese_radical_m按照部首(第一顺序)、笔划(第二顺序)排序schinese_stroke_m按照笔划(第一顺序)、部首(第二顺序)排序schinese_pinyin_m按照拼音排序
48.oracle8i中对象名可以用中文吗?可以
49.如何改变win中sql*plus启动选项?sql*plus自身的选项设置我们可以在$oracle_home/sqlplus/admin/glogin.sql中设置。
50.怎样修改oracel数据库的默认日期altersessionsetnls_date_format='yyyymmddhh24miss';or可以在init.ora中加上一行nls_date_format='yyyymmddhh24miss'
51.如何将小表放入keep池中altertablexxxstorage(buffer_poolkeep);
52.如何检查是否安装了某个patchcheckthatorainventory
53.如何使select语句使查询结果自动生成序号selectrownum,colfromtable;
54.如何知道数据裤中某个表所在的tablespaceselecttablespace_namefromuser_tableswheretable_name='test';select*fromuser_tables中有个字段tablespace_name,(oracle);select*fromdba_segmentswhere…;
55.怎么可以快速做一个和原表一样的备份表createtablenew_tableas(select*fromold_table);
55.怎么在sqlplus下修改procedureselectline,trim(text)tfromuser_sourcewherename=’a’orderbyline;
56.怎样解除procedure被意外锁定altersystemkillsession,把那个session给杀掉,不过你要先查出她的sessionidor把该过程重新改个名字就可以了。
57.sqlreference是个什么东西?是一本sql的使用手册,包括语法、函数等等,oracle官方网站的文档中心有下载.
58.如何查看数据库的状态unix下ps-ef|greporawindows下看服务是否起来是否可以连上数据库
59.请问如何修改一张表的主键altertableaaadropconstraintaaa_key;altertableaaaaddconstraintaaa_keyprimarykey(a1,b1);
60.改变数据文件的大小用alterdatabase....datafile....;手工改变数据文件的大小,对于原来的数据文件有没有损害。
61.怎样查看oracle中有哪些程序在运行之中?查看v$sessions表
62.怎么可以看到数据库有多少个tablespaceselect*fromdba_tablespaces;
63.如何修改oracle数据库的用户连接数?修改initsid.ora,将process加大,重启数据库.
65.如何在pl/sql中读写文件?utl_file包答应用户通过pl/sql读写操作系统文件。
66.怎样把“&”放入一条记录中?insertintoavalues(translate('at{&}t','at{}','at'));
67.exp如何加query参数?expuser/passfile=a.dmptables(bsempms)query='"whereemp_no="'s09394"'""﹔
68.关于oracle8i支持简体和繁体的字符集问题?zhs16gbk可以支
69.dataguard是什么软件?就是standby的换代产品
70.如何创建spfilesql>connect/assysdbasql>select*fromv$version;sql>createpfilefromspfile;sql>createspfilefrompfile='e:"ora9i"admin"eygle"pfile"init.ora';文件已创建。sql>createspfile='e:"ora9i"database"spfileeygle.ora'frompfile='e:"ora9i"admin"eygle"pfile"init.ora';文件已创建。
73.如何单独备份一个或多个表?exp用户/密码tables=(表1,…,表2)
74.如何单独备份一个或多个用户?expsystem/managerowner=(用户1,用户2,…,用户n)file=导出文件
75.如何对clob字段进行全文检索?select*fromawheredbms_lob.instr(a.a,'k',1,1)>0;
76.如何显示当前连接用户showuser
77.如何查看数据文件放置的路径colfile_nameformata50sql>selecttablespace_name,file_id,bytes/1024/1024,file_namefromdba_data_filesorderbyfile_id;
78.如何查看现有回滚段及其状态sql>colsegmentformata30sql>selectsegment_name,ccbzzp,tablespace_name,segment_id,file_id,statusfromdba_rollback_segs
79.如何改变一个字段初始定义的check范围?sql>altertablexxxdropconstraintconstraint_name;之后再创建新约束:sql>altertablexxxaddconstraintconstraint_namecheck();
80.oracle常用系统文件有哪些?通过以下视图显示这些文件信息:v$database,v$datafile,v$logfilev$controlfilev$parameter;
81.内连接innerjoinselecta.*frombsempmsa,bsdptmsbwherea.dpt_no=b.dpt_no;
82.如何外连接selecta.*frombsempmsa,bsdptmsbwherea.dpt_no=b.dpt_no(+);selecta.*frombsempmsa,bsdptmsbwherea.dpt_no(+)=b.dpt_no;
83.如何执行脚本sql文件sql>@$path/filename.sql;
84.如何快速清空一个大表sql>truncatetabletable_name;
85.如何查有多少个数据库实例sql>select*fromv$instance;
86.如何查询数据库有多少表sql>select*fromall_tables;
89.字符串的连接selectconcat(col1,col2)fromtable;selectcol1||col2fromtable;
90.怎么把select出来的结果导到一个文本文件中?sql>spoolc:"abcd.txt;sql>select*fromtable;sql>spooloff;
91.怎样估算sql执行的i/o数sql>setautotraceon;sql>select*fromtable;orsql>select*fromv$filestat;可以查看io数
92.如何在sqlplus下改变字段大小altertabletable_namemodify(field_namevarchar2(100));改大行,改小不行(除非都是空的)
93.如何查询某天的数据select*fromtable_namewheretrunc(日期字段)=to_date('2003-05-02','yyyy-mm-dd');
94.sql语句如何插入全年日期?createtablebsyear(ddate);insertintobsyearselectto_date('20030101','yyyymmdd')+rownum-1fromall_objectswhererownum
95.假如修改表名altertableold_table_namerenametonew_table_name;
96.如何取得命令的返回状态值?sqlcode=0
97.如何知道用户拥有的权限select*fromdba_sys_privs;
98.从网上下载的oracle9i与市场上卖的标准版有什么区别?从功能上说没有区别,只不过oracle公司有明文规定;从网站上下载的oracle产品不得用于商业用途,否则侵权。
99.怎样判定数据库是运行在归档模式下还是运行在非归档模式下?进入dbastudio,历程--〉数据库---〉归档查看。
100.sql>startuppfile和ifile,spfiled有什么区别?pfile就是oracle传统的初始化参数文件,文本格式的。ifile类似于c语言里的include,用于把另一个文件引入spfile是9i里新增的并且是默认的参数文件,二进制格式startup后应该只可接pfile
101.如何搜索出前n条记录?select*fromemployeewhererownum
102.如何知道机器上的oracle支持多少并发用户数sql>conninternal;sql>showparameterprocesses;
103.db_block_size可以修改吗一般不可以﹐不建议这样做的。
104.如何统计两个表的记录总数select(selectcount(id)fromaa)+(selectcount(id)frombb)总数fromdual;
105.怎样用sql语句实现查找一列中第n大值?select*from(selectt.*,dense_rank()over(orderbysal)rankfromemployee)whererank=n;
106.如何在给现有的日期加上2年?(selectadd_months(sysdate,24)fromdual;
107.used_ublk为负值表示什么意思itis"harmless".
108.connectstring是指什么应该是tnsnames.ora中的服务名后面的内容
109.怎样扩大redolog的大小?建立一个临时的redolog组,然后切换日志,删除以前的日志,建立新的日志。
110.tablespace是否不能大于4g没有限制.
111.返回大于等于n的最小整数值selectceil(n)fromdual;
112.返回小于等于n的最小整数值selectfloor(n)fromdual;
113.返回当前月的最后一天selectlast_day(sys2003-10-17)fromdual;
114.如何不同用户间数据导入impsystem/managerfile=aa.dmpfromuser=user_oldtouser=user_newrows=yindexes=y;
115.如何找数据库表的主键字段的名称sql>select*fromuser_constraintswhereconstraint_type='p'andtable_name='table_name';
116.两个结果集互加的函数sql>select*frombsempms_oldintersectselect*frombsempms_new;sql>select*frombsempms_oldunionselect*frombsempms_new;sql>select*frombsempms_oldunionallselect*frombsempms_new;
117.两个结果集互减的函数sql>select*frombsempms_oldminusselect*frombsempms_new;
118.如何配置sequence建sequenceseq_custidcreatesequenceseq_custidstart1incrememtby1;建表时:createtablecust{cust_idsmallintnotnull,...}insert时:insertintotablecustvalues(seq_cust.nextval,...)
129>.返回参数的星期几的写法:selectto_char(sys2003-10-17,'d')fromdual;
130>.返回参数一年中的第几天的写法:selectto_char(sys2003-10-17,'ddd')fromdual;