oracle如何使用,oracle中decode函数的如何使用
oracle如何使用,oracle中decode函数的如何使用详细介绍
本文目录一览: Oracle数据库系统使用经验
oracle数据库是一种大型数据库系统,一般应用于商业,政府部门,它的功能很强大,能够处理大批量的数据,在网络方面也用的非常多。Oracle数据库管理系统是一个以关系型和面向对象为中心管理数据的数据库管理软件系统,其在管理信息系统、企业数据处理、因特网及电子商务等领域有着非常广泛的应用。1.having 子句的用法having 子句对 group by 子句所确定的行组进行控制,having 子句条件中只允许涉及常量,聚组函数或group by 子句中的列。2.外部联接"+"的用法外部联接"+"按其在"="的左边或右边分左联接和右联接。若不带"+"运算符的表中的一个行不直接匹配于带"+"预算符的表中的任何行,则前者的行与后者中的一个空行相匹配并被返回。若二者均不带?+?,则二者中无法匹配的均被返回。利用外部联接"+",可以替代效率十分低下的 not in 运算,大大提高运行速度。例如,下面这条命令执行起来很慢select a.empno from emp a where a.empno not in(select empno from emp1 where job=?SALE?);倘若利用外部联接,改写命令如下:select a.empno from emp a ,emp1 bwhere a.empno=b.empno(+)and b.empno is nulland b.job=?SALE?;可以发现,运行速度明显提高。3.删除表内重复记录的方法可以利用这样的命令来删除表内重复记录:delete from table_name awhere rowid (select max(rowid) from table_namewhere column1=a.column1 and column2=a.column2and colum3=a.colum3 and );不过,当表比较大(例如50万条以上)时,这个方法的效率之差令人无法忍受,需要另想办法(可参看拙文《电信计费中长途重复话单的技术处理》,《计算机与通信》,1999-07)。4.set transaction 命令的用法在执行大事务时,有时oracle会报出如下的错误:ORA-01555:snapshot too old (rollback segment too small)这说明oracle给此事务随机分配的回滚段太小了,这时可以为它指定一个足够大的回滚段,以确保这个事务的成功执行。例如set transaction use rollback segment roll_abc;delete from table_name where commit;回滚段roll_abc被指定给这个delete事务,commit命令则在事务结束之后取消了回滚段的指定。5.使用索引的注意事项select,update,delete 语句中的子查询应当有规律地查找少于20%的表行。如果一个语句查找的行数超过总行数的20%,它将不能通过使用索引获得性能上的提高。索引可能产生碎片,因为记录从表中删除时,相应也从表的索引中删除。表释放的空间可以再用,而索引释放的空间却不能再用。频繁进行删除操作的被索引的表,应当阶段性地重建索引,以避免在索引中造成空间碎片,影响性能。在许可的条件下,也可以阶段性地truncate表,truncate命令删除表中所有记录,也删除索引碎片。6.数据库重建应注意的问题在利用import进行数据库重建过程中,有些视图可能会带来问题,因为结构输入的顺序可能造成视图的输入先于它低层次表的输入,这样建立视图就会失败。要解决这一问题,可采取分两步走的方法:首先输入结构,然后输入数据。命令举例如下 (uesrname:jfcl,password:hfjf,host sting:ora1,数据文件:expdata.dmp):imp jfcl/hfjf@ora1 file=empdata.dmp rows=Nimp jfcl/hfjf@ora1 file=empdata.dmp full=Y buffer=64000commit=Y ignore=Y第一条命令输入所有数据库结构,但无记录。第二次输入结构和数据,64000字节提交一次。ignore=Y选项保证第二次输入既使对象存在的情况下也能成功。以上六条小经验是从平时的工作中总结出来的,拿出来与大家分享,希望能帮到大家。
Oracle客户端怎么用?
首先去下载oracleclient客户端工具
小编这里已经下载的有了,目录结构如下所示
请点击输入图片描述
打开PLSQL,点取消进去,然后弹出PLSQL主界面,找到菜单栏的tools选择属性preferences进去
请点击输入图片描述
请点击输入图片描述
请点击输入图片描述
弹出如下界面,配置oracleclient
配置好两个设置项,点apply,然后点ok,关闭PLSQL,重启PLSQL
请点击输入图片描述
上边的两个填写项就是第一步中的目录,以及目录下的一个文件
如下图所示,在哪个目录就对应的去找就可以了。
请点击输入图片描述
重启PLSQL进入到登录界面,输入相关信息,用户名密码,以及连接信息
连接信息:可以是ip:1521/实例名
也可以是network/admin目录下的tnsname.ora中配置的TNS别名。
请点击输入图片描述
连接进去成功之后
可以随便写一个语句查查,是否正常
select * from dual;
请点击输入图片描述
Oracle中如何创建使用SEQUENCES
Oracle提供了sequence对象,由系统提供自增长的序列号,通常用于生成数据库数据记录的自增长主键或序号的地方. Oracle提供了sequence对象,由系统提供自增长的序列号,通常用于生成数据库数据记录的自增长主键或序号的地方.下面介绍一下关于sequence 的生成,修改,删除等常用的操作:1. 创建 Sequence使用如下命令新建sequence(用户需要有CREATE SEQUENCE 或者CREATE ANY SEQUENCE权限):CREATE SEQUENCE test_sequence INCREMENT BY 1-- 每次加的个数据 START WITH 1-- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10 ; [注意] 如果设置了CACHE值,ORACLE将在内存里预先放置一些sequence,以使存取速度更快。cache里面的取完后,oracle自动再取一组到cache。 但是,使用cache可能会跳号, 当遇到数据库突然异常down掉(shutdown abort),cache中的sequence就会丢失. 因此,推荐在create sequence的时候使用 nocache 选项。2. 使用 sequence:sequence.CURRVAL -- 返回 sequence的当前值 sequence.NEXTVAL -- 增加sequence的值,然后返回 sequence 值[注意]第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,,否则会出错。一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。sequence 存储在数据字典中,存储于user_sequences表 LAST_NUMBER 为最终序列号,也就是sequence游标当前所在的位置。//get sequence last_numberSELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME=TEST_SEQNAME// NEXTVAL 使游标指向下一位(增一或减一)SELECT SEQNAME.NEXTVAL FROM USER_SEQUENCES 得到下一位游标的值3. 修改 Sequence用户必须拥有ALTER ANY SEQUENCE 权限才能修改sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create.命令格式如下:ALTER SEQUENCE test_sequence INCREMENT BY 10 MAXVALUE 10000 CYCLE-- 到10000后从头开始 NOCACHE ; 4. 删除 Sequence DROP SEQUENCE order_seq;更多Oracle相关信息见Oracle 专题页面 ?tid=12
如何使用oracle SQL developer导入表格数据?
oracle是我们经常用到的数据库,有时候我们需要往数据库中导入大量的数据,这种数据如果通过sql插入是比较麻烦的,那么如何用简单的方法来把数据导入到数据库中呢?
将文件整理成表格,第一行最好是用数据库中对应的字段名,后期会比较方便,存储为.xls文件,使用.xlsx导入失败。
打开oracle SQL developer,选中要导入的表名,右键选择导入数据
选择整理好的.xls文件
勾选标题,可以对数据进行预览,同时方便下边操作。预览无误后点击下一步
选择要插入数据库中的字段,也可点击图中标识位置选择全部
选择字段后如下,点击下一步
可以看到左侧源数据列是你的表格第一行内容,如果在前边不选标题此处为列0,列1等,自己无从下手。把源数据列和目标表列进行配对,软件会自动给你按名字相同配对,切人无误后点击下一步
如果点击发送到工作表会出现插入数据的sql语句,然后自己运行即可,如果不需要可以直接点击完成。下面以点击完成为例:
点击完成后开始插入数据
插入完成后表中数据查询如下,可看到数据导入成功。
oracle触发器如何使用
触发器 是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。触发器是许多关系数据库系统都提供的一项技术。在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块。 1.说明 1)触发器是一种特殊的 触发器 是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。触发器是许多关系数据库系统都提供的一项技术。在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块。1.说明1)触发器是一种特殊的存储过程,触发器一般由事件触发并且不能接受参数,存储器由语句块去调用2)触发器分类:1.DML触发器: 创建在表上,由DML事件引发2.instead of触发器: 创建在视图上并且只能在行级上触发,用于替代insert,delete等操作(由于oracle中不能直接对有两个以上的表建立的视图进行DML操作,所以给出替代触发器,,它是专门为进行视图操作的一种处理方法)3.DDL触发器: 触发事件时数据库对象的创建和修改4.数据库事件触发器:定义在数据库或者模式上,由数据库事件触发3)组成:1.触发事件:引发触发器被触发的事件 DML语句(INSERT, UPDATE, DELETE语句对表或视图执行数据处理操作)、DDL语句(如CREATE、ALTER、DROP语句在数据库中创建、修改、删除模式对象)、数据库系统事件(如系统启动或退出、异常错误)、用户事件(如登录或退出数据库)。2.触发时间:即该触发器是在触发事件发生之前(BEFORE)还是之后(AFTER)触发3.触发操作:触发器触发后要完成的事情4.触发对象:包括表、视图、模式、数据库。只有在这些对象上发生了符合触发条件的触发事件,触发器才会执行触发操作。5.触发条件:由WHEN子句指定一个逻辑表达式。只有当该表达式的值为TRUE时,遇到触发事件才会自动执行触发操作。6.触发频率:说明触发器内定义的动作被执行的次数。即语句级(STATEMENT)触发器和行级(ROW)触发器。(比如delete多条数据时,行级触发器可能会执行多次,语句级触发器只会触发一次)2.语法1)说明不同类型的触发器例如DML触发器,Instead of触发器,系统触发器语法格式区别较大2)一般语法CREATE [OR REPLACE] TIGGER触发器名 触发时间 触发事件ON表名/视图名[FOR EACH ROW] //加上FOR EACH ROW 即为行级触发器,不加时为语句级触发器BEGINpl/sql语句ENDcreate [or replace] trigger [schema.]trigger_name{before | after | instead of}{delete [or insert][or update [of column,...n]]}on [schema.]table_name | view_name[for each row [when(condition)]]sql_statement[,...n]例如:CREATE OR REPLACE TRIGGER trigger_name ON table_name[FOR EACH ROW]WHEN (condition)DECLAREBEGINEND;3)instead of 触发器语法语法:CREATE [OR REPLACE] TRIGGER trigger_nameINSTEAD OF{INSERT|DELETE|UPDATE [OF COLUMN...]}[OR {INSERT| DELETE| UPDATE [OF COLUMN...]}]ON VIEW_NAME[REFFERENCING{OLD [AS] OLD | NEW [AS] NEW| PARENT AS PARENT}] // 可以指定相关名称,当前的默认相关名称为OLD和NEW,应用相关名称时需要加:[FOR EACH ROW] //instead of 触发器只能在行级上触发,因为没有必要指定[WHEN CONDITION]DECLAREBEGINEND;说明:INSTEAD OF 用于对视图的DML触发,由于视图可能有多个表进行联结而成,因而并非所有的联结均可更新,运用 INSTEAD OF 触发器可完成相应的操作。3.实例创建测试表格:CREATE TABLE "HNZC"."TRIGGERTEST"("ID" VARCHAR2(20 BYTE),"NAME" VARCHAR2(20 BYTE),"SCORE" NUMBER);create table tab1 select * from triggertest;1)DML触发器/行级触发器触发器如下:CREATE OR REPLACE TRIGGER TRIGGER1AFTER INSERT ON TRIGGERTEST //插入后触发FOR EACH ROW //行级触发器BEGININSERT INTO tab1(ID,NAME) VALUES('22','33');END;执行语句:insert into triggertest (id) values ('aabbcc');语句执行结束,表tab1中新增加一条数据2)限制对表的修改(例如非工作时间不能修改某些表)触发器如下:CREATE OR REPLACE TRIGGER TRIGGER1AFTER INSERT ON TRIGGERTESTFOR EACH ROWBEGINIF(TO_CHAR(SYSDATE,'DAY') IN ('星期三','星期天')) THEN RAISE_APPLICATION_ERROR(-20001,'不是上班时间,不能修改表格triggertest'); END IF;END;执行语句:insert into triggertest (id) values ('aabbcc');今天周三因而输出结果为:在行 1 上开始执行命令时出错:insert into triggertest (id) values ('aabbcc')错误报告:SQL 错误: ORA-20001: 不是上班时间,不能修改表格triggertestORA-06512: 在 "HNZC.TRIGGER1", line 3ORA-04088: 触发器 'HNZC.TRIGGER1' 执行过程中出错通常对表的修改限制如下(即周一至周五9——18点能修改表格)CREATE OR REPLACE TRIGGER TRIGGER1BEFORE INSERT OR DELETE OR UPDATE ON TRIGGERTESTFOR EACH ROWBEGINIF(TO_CHAR(SYSDATE,'DAY') IN ('星期六','星期天')) OR(TO_CHAR(SYSDATE,'HH24:MI') NOT BETWEEN '9:00' AND '18:00') THEN RAISE_APPLICATION_ERROR(-20001,'不是上班时间,不能修改表格triggertest'); END IF;END;3)增加限制条件(如不能更改某个员工的记录)触发器如下:(如下实现月儿的分数只能增加)CREATE OR REPLACE TRIGGER TRIGGER1BEFORE INSERT OR DELETE OR UPDATE ON TRIGGERTESTFOR EACH ROWWHEN(OLD.NAME='月儿')BEGINCASE WHEN UPDATING('SCORE') THENIF:NEW.SCORE当前月儿的分数为20当修改为10时出错UPDATE "HNZC"."TRIGGERTEST" SET SCORE = '10' WHERE ROWID = 'AAAdEzAAPAAAAH+AAB' AND ORA_ROWSCN = '47685303'ORA-20001: 月儿的分数只能提升不能下降ORA-06512: 在 "HNZC.TRIGGER1", line 4ORA-04088: 触发器 'HNZC.TRIGGER1' 执行过程中出错当修改为30时成功UPDATE "HNZC"."TRIGGERTEST" SET SCORE = '30' WHERE ROWID = 'AAAdEzAAPAAAAH+AAB' AND ORA_ROWSCN = '47685303'提交成功4)在触发器中调用存储过程触发器为:CREATE OR REPLACE TRIGGER TRIGGER1BEFORE INSERT OR DELETE OR UPDATE ON TRIGGERTESTFOR EACH ROWBEGINTESTPRO1();END;存储过程为:create or replacePROCEDURE TESTPRO1 AS BEGINinsert into tab1(id,name,score) VALUES('AAA','BBB',200);END TESTPRO1;执行完毕后tab1中增加一条数据5)级联更新触发器如下(triggertest表中name修改时同时修改tab1中的name)create or replacePROCEDURE TESTPRO1 AS BEGINinsert into tab1(id,name,score) VALUES('AAA','BBB',200);END TESTPRO1;执行语句:update triggertest set name= '水儿' where;结果:tab1中name为月儿的也更改为水儿6)instead of触发器TABLE STUDENT表格数据如下创建视图student_viewCREATE OR REPLACE VIEW STUDNET_VIEWAS SELECT CLASSID,AVG(SCORE) AVERAGE_SCORE FROM STUDENTGROUP BY CLASSID;视图数据如下:对视图student_view 执行如下操作:DELETE FROM STUDNET_VIEW WHERE CLASSID='111';执行结果:错误报告:SQL 错误: ORA-01732: 此视图的数据操纵操作非法01732. 00000 - "data manipulation operation not legal on this view"解决方法:创建INSTEAD OF 视图CREATE OR REPLACE TRIGGER STUDENT_VIEW_DELETEINSTEAD OF DELETE ON STUDNET_VIEWFOR EACH ROWBEGINDELETE FROM STUDENT WHERE CLASSID=:OLD.CLASSID;END STUDENT_VIEW_DELETE;执行删除语句DELETE FROM STUDNET_VIEW WHERE CLASSID='111';执行结果:删除成功1 行已删除。4.注意事项1) 在触发器的执行部分只能用DML语句(SELECT、INSERT、UPDATE、DELETE),不能使用DDL语句(CREATE、ALTER、DROP)2) 触发器中不能使用commit语句,触发器的操作与触发事件(INSERT,UPDATE,DELETE)一起进行COMMIT和ROLLBACK;3) 一个表上的触发器越多,对于表的DML操作性能影响越大4) 触发器最大为32K
oracle中decode函数的如何使用
本文主要介绍了oracle中decode函数的使用方法示例,还是比较不错的,希望大家学完能掌握decode函数的使用,赶紧一起来看一下吧。decode的几种用法1:使用decode判断字符串是否一样DECODE(value,if1,then1,if2,then2,if3,then3,...,else)含义为IF 条件=值1 THENRETURN(value 1)ELSIF 条件=值2 THENRETURN(value 2)......ELSIF 条件=值n THENRETURN(value 3)ELSERETURN(default)END IFsql测试select empno,decode(empno,7369,'smith',7499,'allen',7521,'ward',7566,'jones','unknow') as name from emp where rownum<=10输出结果7369 smith7499 allen7521 ward7566 jones7654 unknow7698 unknow7782 unknow7788 unknow7839 unknow7844 unknow2:使用decode比较大小select decode(sign(var1-var2),-1,var 1,var2) from dualsign()函数根据某个值是0、正数还是负数,分别返回0、1、-1sql测试select decode(sign(100-90),-1,100,90) from dual输出结果90100-90=10>0 则会返回1,所以decode函数最终取值为90反正select decode(sign(100-90),1,100,90) from dual输出结果100100-90=10>0返回1,判断结果为1,返回第一个变量100,最终输出结果为1003:使用decode函数分段工资大于5000为高薪,工资介于3000到5000为中等,工资小于3000为低薪sql测试SELECT ename,sal, DECODE(SIGN(sal - 5000), 1, 'high sal', 0, 'high sal', - 1, DECODE(SIGN(sal - 3000), 1, 'mid sal', 0, 'mid sal', - 1, DECODE(SIGN(sal - 1000), 1, 'low sal', 0, 'low sal', - 1, 'low sal')))FROM emp输出结果SMITH 800 low salALLEN 1600 low salWARD 1250 low salJONES 2975 low salMARTIN 1250 low salBLAKE 2850 low salCLARK 2450 low salSCOTT 3000 mid salKING 5000 high salTURNER 1500 low salADAMS 1100 low salJAMES 950 low salFORD 3000 mid salMILLER 1300 low sal4:利用decode实现表或者试图的行列转换sql测试SELECT SUM(DECODE(ENAME,'SMITH',SAL,0)) SMITH, SUM(DECODE(ENAME,'ALLEN',SAL,0)) ALLEN, SUM(DECODE(ENAME,'WARD',SAL,0)) WARD, SUM(DECODE(ENAME,'JONES',SAL,0)) JONES, SUM(DECODE(ENAME,'MARTIN',SAL,0)) MARTIN FROM EMP输出结果如下SMITH ALLEN WARD JONES MARTIN 800 1600 1250 2975 12505:使用decode函数来使用表达式来搜索字符串decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。sql测试SELECT ENAME, SAL, DECODE(INSTR(ENAME, 'S'), 0, '不含有s', '含有s') AS INFOFROM EMP输出结果SMITH 800 含有sALLEN 1600 不含有sWARD 1250 不含有sJONES 2975 含有sMARTIN 1250 不含有sBLAKE 2850 不含有sCLARK 2450 不含有sSCOTT 3000 含有sKING 5000 不含有sTURNER 1500 不含有sADAMS 1100 含有sJAMES 950 含有sFORD 3000 不含有sMILLER 1300 不含有sDecode函数在实际开发中非常的有用结合Lpad函数,如何使主键的值自动加1并在前面补0select LPAD(decode(count(记录编号),0,1,max(to_number(记录编号)+1)),14,'0') 记录编号 from tetdmiseg:select decode(dir,1,0,1) from a1_intervaldir 的值是1变为0,是0则变为1比如我要查询某班男生和女生的数量分别是多少?通常我们这么写:select count(*) from 表 where 性别 = 男;select count(*) from 表 where 性别 = 女;要想显示到一起还要union一下,太麻烦了用decode呢,只需要一句话select sum(decode(性别,男,1,0)),sum(decode(性别,女,1,0)) from 表eg:select sum(decode(siteno,'LT',1,0)),sum(decode(siteno,'SZ',1,0)) from facd605;select sum(case siteno when 'LT' then 1 else 0 end),sum(case siteno when 'SZ' then 1 else 0 end) from facd605;大家学会了吗?赶紧动手尝试一下吧。
如何连接oracle数据库?
如何配置才能使客户端连到数据库:\x0d\x0a\x0d\x0a要使一个客户端机器能连接oracle数据库,需要在客户端机器上安装oracle的客户端软件,唯一的例外就是java连接数据库的时候,可以用 \x0d\x0ajdbc \x0d\x0athin模式,不用装oracle的客户端软件。加入你在机器上装了oracle数据库,就不需要在单独在该机器上安装oracle客户端了,因为装 \x0d\x0aoracle数据库的时候会自动安装oracle客户端。\x0d\x0a 用过sql \x0d\x0aserver数据库然后又用oracle的新手可能会有这样的疑问:问什么我用sql server的时候不用装sql \x0d\x0aserver的客户端呢?原因很简单,sql server也是microsoft的,它在操作系统中集成了sql \x0d\x0aserver客户端,如果microsoft与oracle有协议,将oracle客户端也集成到操作系统中,那我们也就不用在客户端机器装oracle\x0d\x0a 客户端软机就可访问数据库了,不过,这好像是不可能实现的事情。\x0d\x0a 也有的人会问:为什么在sql \x0d\x0aserver中没有侦听端口一说,而在oracle中要配置侦听端口?其实sql \x0d\x0aserver中也有侦听端口,只不过microsoft将侦听端口固定为1433,不允许你随便改动,这样给你一个错觉感觉sql \x0d\x0aserver中没有侦听端口,咳,microsoft把太多的东西都封装到黑盒子里,方便使用的同时也带来的需要副作用。而oracle中的侦听端口直接\x0d\x0a 在配置文件中,允许随便改动,只不过无论怎样改动,要与oracle服务器端设置的侦听端口一致。\x0d\x0a好,言归正传,我们如何做才能使客户端机器连接到oracle数据库呢?\x0d\x0aA. 安装相关软件\x0d\x0aB. 进行适当的配置\x0d\x0a\x0d\x0aA.在适当的位置安装适当的软件:\x0d\x0a在客户端机器:\x0d\x0a1.在客户端机器上安装ORACLE的Oracle Net通讯软件,它包含在oracle的客户端软件中。\x0d\x0a2.正确配置了sqlnet.ora文件:\x0d\x0aNAMES.DIRECTORY_PATH = (TNSNAMES, ?.)\x0d\x0aNAMES.DEFAULT_DOMAIN=DB_DOMAIN\x0d\x0a一般情况下我们不用NAMES.DEFAULT_DOMAIN参数。如果想不用该参数用#注释掉或将该参数删除即可,对于NAMES.DIRECTORY_PATH参数采用缺省值即可,对于NAMES.DEFAULT_DOMAIN参数有时需要注释掉,在下面有详细解释。\x0d\x0a3.正确配置了tnsname.ora文件\x0d\x0a\x0d\x0a在服务器端机器:\x0d\x0a1.保证listener已经启动\x0d\x0a2.保证数据库已经启动。\x0d\x0a如果数据库没有启动,用:\x0d\x0aOracle 9i:\x0d\x0ados>sqlplus “/ as sysdba”\x0d\x0asqlplus> startup\x0d\x0aOracle 8i:\x0d\x0ados>svrmgrl\x0d\x0asvrmgrl>connect internal\x0d\x0asvrmgrl>startup\x0d\x0a命令启动数据库\x0d\x0a如果listener没有启动,用:\x0d\x0alsnrctl start [listener name]\x0d\x0alsnrctl status [listener name]\x0d\x0a命令启动listener\x0d\x0aB.进行适当的配置\x0d\x0a如何正确配置tnsname.ora文件:\x0d\x0a\x0d\x0a可\x0d\x0a 以在客户端机器上使用oracle Net Configuration Assistant或oracle Net \x0d\x0aManager图形配置工具对客户端进行配置,该配置工具实际上修改tnsnames.ora文件。所以我们可以直接修改tnsnames.ora文件,\x0d\x0a 下面以直接修改tnsnames.ora文件为例:\x0d\x0a该文件的位置为: ?\network\admin\tnsnames.ora (for windows)\x0d\x0a?/network/admin/tnsnames.ora (for unix)\x0d\x0a此处,假设服务器名为testserver,服务名为orcl.testserver.com,使用的侦听端口为1521,则tnsnams.ora文件中的一个test网络服务名(数据库别名)为:\x0d\x0atest =\x0d\x0a(DESCRIPTION=\x0d\x0a(ADDRESS_LIST=\x0d\x0a(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))\x0d\x0a)\x0d\x0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)\x0d\x0a)\x0d\x0a)\x0d\x0a此处的笑脸为)。\x0d\x0a 红色的内容为需要根据实际情况修改的内容,现解释如下:\x0d\x0a PROTOCOL:客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改。\x0d\x0a\x0d\x0aHOST:数据库侦听所在的机器的机器名或IP地址,数据库侦听一般与数据库在同一个机器上,所以当我说数据库侦听所在的机器一般也是指数据库所在的机 \x0d\x0a \x0d\x0a器。在UNIX或WINDOWS下,可以通过在数据库侦听所在的机器的命令提示符下使用hostname命令得到机器名,或通过ipconfig(for\x0d\x0a WINDOWS) or ifconfig(for \x0d\x0aUNIX)命令得到IP地址。需要注意的是,不管用机器名或IP地址,在客户端一定要用ping命令ping通数据库侦听所在的机器的机器名,否则需要在\x0d\x0a hosts文件中加入数据库侦听所在的机器的机器名的解析。\x0d\x0a\x0d\x0aPORT:数据库侦听正在侦听的端口,可以察看服务器端的listener.ora文件或在数据库侦听所在的机器的命令提示符下通过lnsrctl status [listener name]命令察看。此处Port的值一定要与数据库侦听正在侦听的端口一样。\x0d\x0a SERVICE_NAME:在服务器端,用system用户登陆后,sqlplus> show parameter service_name命令察看。\x0d\x0a 如何利用配置的网络服务名连接到数据库:\x0d\x0a 用sqlplus程序通过test网络服务名进行测试,如sqlplus system/manager@test。\x0d\x0a 如果不能连接到数据库,则在tnsname.ora文件中的test网络服务名(net \x0d\x0aservice)后面加上sqlnet.ora文件中NAMES.DEFAULT_DOMAIN参数的值,此处我的参数值为 \x0d\x0atestserver.com,将其加到网络服务名后面,修改后的tnsname.ora中关于该网络服务名的内容为:\x0d\x0a\x0d\x0a 什么情况下会引起oracle自动设置NAMES.DEFAULT_DOMAIN参数?\x0d\x0a \x0d\x0a 出现这种情况的典型环境为windows的客户端的‘我得电脑à属性à计算机名à更改à其它?à此计算机的主DNS后缀’中设置了‘primary \x0d\x0a dns \x0d\x0asuffix’,因为在这种情况下安装客户端时,会在sqlnet.ora文件中自动设置NAMES.DEFAULT_DOMAIN参数,或许当把计算机\x0d\x0a 加入域中安装oracle客户端时也会出现这种情况,有条件的话大家可以试一下。\x0d\x0a\x0d\x0a我在设置oracle的客户端时一般手工修改tnsnames.ora文件,但是还有许多人喜欢用图形工具配置,该图形工具最终还是修改tnsnames.ora文件,但是它有时会引起其它的问题:\x0d\x0a\x0d\x0a在用oracle的图形配置软件'net assistant'或‘Net Configuration \x0d\x0aAssistant’配置网络服务名时,假如已经设置了‘primary dns \x0d\x0asuffix’,但是在图形配置软件中写的网络服务名的名字中没有‘primary dns \x0d\x0asuffix’,如只是写了test,则图形配置软件会自动在后面加上‘primary dns \x0d\x0asuffix’,使之变为test.testserver.com,并存在tnsnames.ora中,而不管你的sqlnet.ora文件中是否有 \x0d\x0aNAMES.DEFAULT_DOMAIN参数。此时,用图形工具进行测试连接是通过的,但是假如此时sqlnet.ora文件中没有 \x0d\x0aNAMES.DEFAULT_DOMAIN参数,则你在使用网络服务名时应该使用在tnsnames.ora中的 \x0d\x0atest.testserver.com,而不是你在图形配置软件中键入的test。解决的办法为:\x0d\x0a可以在sqlnet.ora文件中设置NAMES.DEFAULT_DOMAIN= testserver.com,这时你可以用test或test.testserver.com连接数据库\x0d\x0a在sqlnet.ora文件中不设置NAMES.DEFAULT_DOMAIN参数,在tnsnames.ora文件中将test.testserver.com中的.testserver.com去掉,这时你可以用test连接数据库。\x0d\x0a\x0d\x0a关于为什们在网络服务名后面加db_domain参数,需要了解sql*plus连接数据库的原理,我在后面解决12154常见故障中给出了详细的说明。\x0d\x0a\x0d\x0a如果上面的招数还不奏效的话,只好用一下乾坤大挪移了。\x0d\x0a将客户端的网络服务名部分\x0d\x0atest.testserver.com =\x0d\x0a(DESCRIPTION=\x0d\x0a(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))\x0d\x0a)\x0d\x0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)\x0d\x0a)\x0d\x0a)\x0d\x0a此处的笑脸为)。\x0d\x0a拷贝到服务器的tnsnames.ora文件中。然后再服务器端用sqlplus system/manager@test.testserver.com连接到数据库。\x0d\x0a 如果能连接成功,说明你的客户端与服务器端的网络有问题。\x0d\x0a 如果连接不成功,用前面的部分检查网络服务名部分部分是否正确,如果确信网络服务名部分正确而且所有的客户端都连不上数据库则可能为系统TCP/IP或Oracle系统有问题,建议重新安装数据库。\x0d\x0a该错误表示用于连接的网络服务名在tnsnames.ora文件中不存在,如上面的tnsnames.ora中的网络服务名只有test,假如用户在连接时用sqlplus system/manager@test1则就会给出TNS-12154错误。\x0d\x0a要注意的是,有时即使在tnsnames.ora文件中有相应的网络服务名,可是用该网络服务名连接时还会出错,出现这种情况的典型配置如下(在客户端的机器上):\x0d\x0asqlnet.ora文件:\x0d\x0aNAMES.DIRECTORY_PATH = (TNSNAMES, ?.)\x0d\x0aNAMES.DEFAULT_DOMAIN = server.com\x0d\x0atnsnames.ora文件:\x0d\x0atest =\x0d\x0a(DESCRIPTION=\x0d\x0a(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))\x0d\x0a)\x0d\x0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)\x0d\x0a)\x0d\x0a)\x0d\x0a此处的笑脸为)。\x0d\x0asql*plus运行基本机理:\x0d\x0a 在用户输入sqlplus system/manager@test后,sqlplus程序会自动到sqlnet.ora文件中找NAMES.DEFAULT_DOMAIN参数,假 如该参数存在,则将该参数中的值取出,加到网络服务名的后面, \x0d\x0a\x0d\x0a即此例中你的输入由sqlplus system/manager@test自动变为sqlplus system/manager@test.server.com\x0d\x0a \x0d\x0a,然后再到tnsnames.ora文件中找test.server.com网络服务名,这当然找不到了,因为该文件中只有test网络服务名,所以报 \x0d\x0a 错。解决的办法就是将sqlnet.ora文件中的NAMES.DEFAULT_DOMAIN参数注释掉即可,如 \x0d\x0a#NAMES.DEFAULT_DOMAIN = \x0d\x0aserver.com。假如NAMES.DEFAULT_DOMAIN参数不存在,则sqlplus程序会直接到tnsnames.ora文件中找 \x0d\x0atest网络服务名,然后取出其中的host,port,tcp,service_name,利用这些信息将连接请求发送到正确的数据库服务器上。\x0d\x0a 另外原则上tnsnames.ora中的配置不区分大小写,但是我的确遇到区分大小写的情况,所以最好将使用的网络服务与tnsnames.ora中配置的完全一样。\x0d\x0aORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect Descriptor.\x0d\x0a该错误表示能在tnsnames.ora中找到网络服务名,但是在tnsnames.ora中指定的SERVICE_NAME与服务器端的SERVICE_NAME不一致。解决的办法是修改tnsnames.ora中的SERVICE_NAME。\x0d\x0a\x0d\x0a 易混淆术语介绍:\x0d\x0a \x0d\x0a Db_name:对一个数据库(Oracle database)的唯一标识,该数据库为第一章讲到的Oracle \x0d\x0adatabase。这种表示对于单个数据库是足够的,但是随着由多个数据库构成的分布式数据库的普及,这种命令数据库的方法给数据库的管理造成一定的负 \x0d\x0a 担,因为各个数据库的名字可能一样,造成管理上的混乱。为了解决这种情况,引入了Db_domain参数,这样在数据库的标识是由Db_name和 \x0d\x0aDb_domain两个参数共同决定的,避免了因为数据库重名而造成管理上的混乱。这类似于互连网上的机器名的管理。我们将Db_name和 \x0d\x0aDb_domain两个参数用’.’连接起来,表示一个数据库,并将该数据库的名称称为Global_name,即它扩展了Db_name。 \x0d\x0aDb_name参数只能由字母、数字、’_’、’#’、’$’组成,而且最多8个字符。\x0d\x0a\x0d\x0a Db_domain:定义一个数据库所在的域,该域的命名同互联网的’域’没有任何关系,只是数据库管理员为了更好的管理分布式数据库而根据实际情况决定的。当然为了管理方便,可以将其等于互联网的域。\x0d\x0a\x0d\x0aGlobal_name:对一个数据库(Oracle \x0d\x0adatabase)的唯一标识,oracle建议用此种方法命令数据库。该值是在创建数据库是决定的,缺省值为Db_name. \x0d\x0aDb_domain。在以后对参数文件中Db_name与Db_domain参数的任何修改不影响Global_name的值,如果要修改 \x0d\x0aGlobal_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO \x0d\x0a命令进行修改,然后修改相应参数。\x0d\x0a\x0d\x0aService_name:该参数是oracle8i新引进的。在8i以前,我们用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,\x0d\x0a \x0d\x0a一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,\x0d\x0a 而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. \x0d\x0aDb_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关\x0d\x0a 系,即不必Service name 必须与SID一样。\x0d\x0aNet service name:网络服务名,又可以称为数据库别名(database alias)。是客户端程序访问数据库时所需要,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明的特性。
如何连接oracle数据库
使用sqlplus连接oracle11g数据库步骤如下所示:
方法一:
1、找到sqlplus,在开始菜单你安装的oracle-》应用程序开发目录下面;
点击查看大图" class="ikqb_img_alink" rel="nofollow noopener" bdsfid="313">
2、点击SQLPlus,弹出cmd;
3、输入用户名,还有密码,密码后面加上@数据库实例名,登录成功后界面如下所示;
方法二:
在开始-》运行(快捷键winr),输入cmd。弹出的黑色框中输入:sqlplus用户名/密码@数据库实例名;
Oracle数据库操作时如何使用LOWER()、UPPER()函数
Oracle LOWER() 和 UPPER()函数的使用方法
一列返回行不区分大小写 这是常见的做法 使列不区分大小写 以确保您所希望返回所有行
SELECT * FROM COURSES WHERE LOWER(education_delivery_method) = classroom
您可以使用Oracle的UPPER() or LOWER() 函数来在你的SQL选择格式列
SELECT UPPER(FIRSTNAME) AS "FIRSTNAME" LASTNAME FROM STUDENTS WHERE RowNum < 格式一列使用上下功能 它可以使用与串()一起下的Oracle UPPER() or LOWER()函数函数来完成不同类型的格式
SELECT UPPER(SUBSTR(LASTNAME )) || LOWER(SUBSTR(LASTNAME )) FROM STUDENTS WHERE RowNum < 更新一组行的变化情况 它可以使用一个更新语句Oracle的 UPPER() or LOWER()函数一起使用 以改变“案“的一组行
UPDATE STUDENTS SET LASTNAME = UPPER(LASTNAME) WHERE LASTNAME = Jones /
lishixinzhi/Article/program/Oracle/201311/19091