INFORMIX与ORACLE的异同
本文主要从业务开发、测试的角度阐述Informix与Oracle的不同,并不适合SMS、支撑的同学们。另外有些内容是从其他一些资料上借花献佛呈现给大家的,希望相关的兄弟不要出来索要版权。水平有限又写得匆忙,如有错误,欢迎大家指正,以便更改。
―――吴继锋
1、登陆数据库
Informix与oracle都提供了各自的数据库操作环境:dbaccess、sqlplus
Informix:dbaccess $TELLIN_DBNAME
查询本数据库有哪些表,某个表的表结构如何在informix的dbaccess中是非常简单的,只需通过方向键选择相应的选项即可。
Oracle:sqlplus 用户名/密码
对于Oracle的登陆方式我们常常使用sqlplus /,这种方式是使用操作系统鉴权,它的实际用户名有一个OPS前缀,我们进入sqlplus之后可以使用命令:show user进行查看。
另外在Informix的dbaccess中,执行delete、update等语句时,默认为提交,而在Oracle中,默认为不提交,需要执行commit命令才能将结果提交数据库。
Tip:
查询本数据库有哪些表:select table_name from user_tables;
查表结构:desc tablename;  如:desc eppc_service;
2、Load、Unload某一张表的数据
Informix:
dbaccess $TELLIN_DBNAME << !
load from filename insert into table_name1;
unload to filename select * from table_name2;
!
Oracle:
Oracle没有为我们提供直接加载.unl文件形式数据的命令,不过IIN平台提供了myload和myunload
命令形式:myload username/password filename delimate sqlcontent
          myunload username/password filename delimate sqlstatement
实例:myload / eppc_service.unl | insert into eppc_service
      myunload / eppc_service.unl '|' “select * from eppc_service”
当然也可以使用oracle提供的sqlldr命令进行数据的导入导出,但使用sqlldr时必须编写脚本文件,比较繁琐,有兴趣的同学可以查阅相应文档,本文不再累述。
3、Goracle 时间转换rant授权
Oracle可以单张表授权,如:
设有用户scu1、scu2
在scu1的sqlplus中输入:grant select on basetab_eppc to scu2;        //即将scu1的basetab_eppc表的select权限开放给scu2
在scu2的sqlplus中输入:select * from scu1.basetab_eppc;          //可以查询成功
                    select * from scu1. CMP_Supplyment      //提示失败
Informix至少需要授权connect权限,才能在另一数据库中查询本数据库的内容,如:
设有用户scu1、scu2,数据库名scu1db、scu2db
scu1db中执行:
grant CONNECT to scu2;
scu2db中执行:
select * from scu2db:eppc_fee;                        //可以查询成功
4、AutoService中前后置shell的编写
Infomix:
dbaccess $TELLIN_DBNAME << !
update basetab_eppc set substateforc[3]=1, accountleft=5000 where msisdn=’133********’;
!
Oracle:
我们当然可以使用
sqlplus / << !
update basetab_eppc set accountleft=5000;
!
但是,sqlplus不支持形如update basetab_eppc set substateforc[3]=1的对某一列特定位的赋值,这种情况之下我们需要写成:
sqlplus / << !
update basetab_eppc set substateforc=substr( substateforc,1,2)||'1'||substr( substateforc,4);
!
如果一条语句需要有对多列特定位赋值,就需要写成:
sqlplus / << !
update basetab_eppc set substateforc=substr( substateforc,1,2)||'1'||substr( substateforc,4),FunctionFlag=substr( FunctionFlag,1,1)||'1'||substr( FunctionFlag,3);
!
这种情况之下,测试部的兄弟们为我们写了一个shell:exsql,我们只需要写成如下形式即可:
exsql "update eppc_service set controlflagex[1]=1";
但是需要注意的是,exsql对字段的某一位更新时每次只能更新一个,exsql可以同时更新多个字段,如果同一条语句中既更新多个字段又更新某一位时,需要更新的那一位要放在最后。
如下形式都是不对的:
exsql "update eppc_service set controlflagex[1]=1,controlflagex[2]=1";  //按位更新不能多于一条
exsql "update eppc_service set controlflagex[1]=1, ServiceAdmNum=’1331066’";    //按位更新必须放在最后

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。