oracle 和informix

Oraclesinoregal DS对比文档

sinoregal DS sql语句

1、创建数据库
      eg1. 创建不记录日志的库testdb,参考语句如下:

CREATE DATABASE testdb;

      eg2. 创建带缓冲式的记录日志的数据库testdb(SQL语句不一定在事务之中,拥有者名字不被用于对象的解析),参考语句如下:

CREATE DATABASE testdb WITH BUFFERED LOG;

      eg3. 创建无缓冲式的记录日志的数据库testdb(SQL语句不一定在事务之中,拥有者名字不被用于对象的解析),参考语句如下:

CREATE DATABASE testdb WITH LOG;

添加字段:

alter table tableName add column varchar(10);

 修改字段类型

 ALTER TABLE TABLE1 MODIFY( COL1 VARCHAR(255))

删除表:

drop table table_name;

 

 创建普通数据表:

       eg1、如下语句创建了一个集团信息表cti_vccinfo:

create table cti_vccinfo(

  vccid     CHAR(6)     not null,

  vccname   VARCHAR(255),

  effective INTEGER     default 0 not null,

  agentmax  INTEGER     default 0 not null,

  ivrmax    INTEGER     default 0 not null,

  updatekey VARCHAR(30),

  primary key (vccid) constraint PK_CTI_VI

);

更新语句:

      例如想将student中的id为1000的记录的name字段更新为amigo,age字段更新为28,语句参考如下:

              update student set name='amigoxie', age=28 where id='1000';

     使用如下的写法也是等效的:

              update student set (name, age)=('amigoxie', 28) where id='1000';

 删除语句:

     例如,删除student表中的所有数据,参考语句如下:

            delete from student;

     例如,删除student表中id为1001的数据,参考语句如下:

             delete from student where id='1001';

 

 

查询语句:

     我们使用select语句从数据库中查询数据,select语句的使用语法如下所示:

 

SELECT 字段列表(各个字段之间用英文逗号隔开)

   FROM 表列表(多个表之间用英文逗号隔开)

      [WHERE 查询条件]

         [GROUP BY 字段列表]

         [HAVING 条件]

         [ORDER BY 字段列表]

         [INTO TEMP 临时表的名称]

 

视图的创建:

 

create view view_name(

        col1,   --  先将列明列出

        col2,

        col3

)as

select a.col1,

       null::varchar(20) as col2        --col2列为空值

       b.col3

from table1 a left join 

     tbale2 b on (a.id=b.id)

where 1=1

          and b.type1=c.type1

函数(存储过程)的创建:

 

CREATE FUNCTION(PROCEDURE)  function_name(

    v_begin_date        datetime year to day,

    v_hours               int)     --传入值及类型

 

returning int       --返回值类型

DEFINE name1 varchar(20); --定义参数类型

DEFINE num_1 INTEGER;  --定义参数类型

DEFINE ts INTEGER;       --定义参数类型

 

  let ts =  5 ;    --赋值

 

 return ts;            --返回值

 end function(PROCEDURE);        --结束

 

 

 

Oraclesinoregal DS调试

1.关于表连接的使用:

   Oracle:select A.id,B.name from emp A,Customer B where A.id(+)=B.id  右连接

   DS :select A.id,B.name from emp A right join Customer B on (A.id =B.id)

 

   Oracle:select A.id,B.name from emp A,Customer B where A.id=B.id(+)  左连接

   DS :select A.id,B.name from emp A left join Customer B on (A.id =B.id)

 

   Oracle:select A.id,B.name from emp A,Customer B where A.id(+)=B.id(+)  全外连接

   DS :select A.id,B.name from emp A full join Customer B on (A.id =B.id)

 

2.时间to_charto_date用法:

   Oracle :

       select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual

       //显示:08-11-07 13:22:42

       select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh24:mi:ss') from dual

       // 显示:2005-12-25 13:25:59

  DS:

     select to_char(current,'%y-%m-%d %H:%M:%S' ) from sysmaster:sysdual

       //显示 16-08-06 10:26:13

     select to_date('2005-12-25 13:25:59','%Y-%m-%d %H:%M:%S') from sysmaster:sysdual

      //显示 2005-12-25 13:25:59

3. rownum的用法

  Oralce: select rownum rn from dual;

  DS select rownum() rn from sysmaster:sysdual;

4.round函数的使用:

 Oracleselect round(1/34,3)*100||'%' from dual   结果为:2.9%

        select round(1/34*100,3)||'%' from dual   结果为:2.941%

 DS :     select round(1/34*100,1)||'%' from dual   结果为:2.9%

        select round(1/34*100,3)||'%' from dual   结果为:2.941%

5.引用其他库的表:

 Oracleselect * from base.table1

 DS:    select * from base:table1

6.分页查询:

 Oracle :  select * from (select rownum as rn from table_a ) where rn>=4 and rn<=10;  

              -         -从第四条开始取,到第10条结束,共7

  DS:  (1)select skip 3 * from (select first 10 * from table_a )

       (2)select skip 3 first 7 * from table_a;  -- 越过前3条,连续取7

7.一条sql中使用多个rownum

 Oracle:Select  Rownum, to_char(add_months(to_date('20151020', 'yyyymmdd'),Rownum-1),'yyyyMM')  as month from dual   Connect by add_months(to_date('20151020','yyyymmdd'),rownum-2)< to_date('20160220', 'yyyymmdd')

DS:Select Rownum(),to_char((to_date('20151020', '%Y%m%d')+(Rownum_1()-1) units month),'%Y%m') as month from sysmaster:sysdual  connect by (to_date('20151020', '%Y%m%d') + (rownum_2()-1) units month)< to_date('20160220', '%Y%m%d')

注:DS中的rownum()是一个计数器,当一个sql中出现多个是,使用不同的计数器,我们一共设置了四个,分别是:rownum(),rownum_1(),rownum_2(),rownum_3().执行rownum()之前,先执行call init_rownum();

最后一行,rownum-2 改为 rownum-1查询结果是一致的

8.时间计算:

    oracle:(sysdate)

       DS:(current)

ADD_MONTHS ( SYSDATE , +12) 

current +1 units year  --日期加一年

ADD_MONTHS ( SYSDATE , +1)  

current +1 units month  --日期加一个月

sysdate+1

current +1 units day  --日期加一天

sysdate+1/24

current +1 units hour  --日期加一小时

sysdate+1/24/60

current +1 units minute --日期加一分钟

sysdate+1/24/60/60

current +1 units second  --日期加一秒

 

Oracle: Select sysdate+1 from dual

DS: select current +1 units day from sysmaster:sysdual

9.Oraclesinoregal DS的数据类型对比:

 

 

10.时间差的计算:

  Oracle: select ceil(date1 - date2) * 24 * 60 * 60) 相差秒数 FROM DUAL;

  DS:    select fn_dev_datetime(date1 ,date2 ) from sysmaster:sysdual

 

Oracle:select ceil((date1 - date2) * 24 * 60 * 60)相差分钟数 FROM DUAL;

DS:    select ceil(fn_dev_datetime(date1,date2)/60 )from sysmaster:sysdual

 

Oracle:select ceil((date1 - date2) * 24 * 60 * 60) 相差小时数 FROM DUAL;

DS:    select fn_dev_datetime((date1 ,date2 )/(60*60)) from sysmaster:sysdual

 

Oracle:select ceil((date1 - date2) * 24 * 60 * 60))  相差天数 FROM DUAL;

DS:    select fn_dev_datetime((date1 ,date2 ) /(60*60*24)) from sysmaster:sysdual

 

11.递归算法(CONNECT BY PRIOR):

  如果只是一个表的connect by,不需要修改。如果是两个或多个表:

oracle:

SELECT a1.id ,a1.parent _id FROM table1 a1, table2 a2 WHERE 1 = 1

  AND a1.id = a2.id

           CONNECT BY PRIOR a1.dic_item_id = a1.parent_id

           START WITH parent_id = '1'

DS:select a1.id ,a1.parent_id from ((SELECT a3.dic_item_id ,a3.parent_id Table1 a3

 CONNECT BY PRIOR a3.dic_item_id = a3.parent_id  START WITH parent_id = '1') a1, Table2a2

   WHERE  1 = 1  AND a1.id = a2.id)  

注:先将递归需要的表查询出来之后,在于其他表进行连接。

12.索引-oracle:  

CREATE INDEX index_name

   ON table_name ( "col1", "col2" ) TABLESPACE SRITNG

索引-DS:

CREATE INDEX index_name

    ON table_name(col1,col2);

 

 

外键-oracle:

 ALTER TABLE ACT_RU_EVENT_SUBSCR ADD ( CONSTRAINT ACT_FK_EVENT_EXEC FOREIGN KEY ( "EXECUTION_ID_" ) REFERENCES ACT_RU_EXECUTION ( "ID_" ) );

DS:

ALTER TABLE ACT_RU_EVENT_SUBSCR

 ADD CONSTRAINT  FOREIGN KEY (EXECUTION_ID_) REFERENCES ACT_RU_EXECUTION(ID_) CONSTRAINT ACT_FK_EVENT_EXEC;

 

13.计算时间差(两个日期的差值):

 oralce

        select ceil(date1-date2) * 24 * 60 * 60  相差秒数 FROM DUAL;

        select ceil(date1-date2) * 24 * 60    相差分钟数 FROM DUAL;

        select ceil(date1-date2) * 24   相差小时数 FROM DUAL;

        select ceil(date1-date2)  相差天数 FROM DUAL;

DS:

 select fn_dev_datetime(date1-date2) from sysmaster:sysdual 相差的秒

 select ceil(fn_dev_datetime(date1-date2)/60 )from sysmaster:sysdual 相差分钟数

 select ceil(fn_dev_datetime(date1-date2) /(60*60))from sysmaster:sysdual 相差小时数

 select ceil(fn_dev_datetime(date1-date2)/(60*60*24))from sysmaster:sysdual 相差天数

注:fn_dev_datetime(date1,date2)函数,返回时间差是秒,date1-date2

14.求第几个季度:

   Oracle : select to_char(sysdate,'q') from dual

DS:  select qofyear(date1) from sysmaster:sysdual

 

15.求第几周:

  oracleselect to_char(sysdate,'ww') from dual;

   DS:  select weekofyear(date1) from sysmaster:sysdual

16.存储过程中的游标的处理:

  oracle:

CURSOR cursor1

   IS

   SELECT RPT_NAME,RPT_USER_ID

            FROM FACT_CASE_USER_DAY;

    OPEN cursor1;

         LOOP

              FETCH cursor1

           INTO l_name,l_rpt_user_id;

           EXIT WHEN cursor1%NOTFOUND;

 insert into tb1 (col1,col2) values(l_name,l_rpt_user_id);

 

  END LOOP;

  CLOSE cursor1;                                    

                

DS(隐形):

define   l_name varchar(20);

define   l_rpt_user_id integer;

  foreach SELECT RPT_NAME,RPT_USER_ID

           into l_name,l_rpt_user_id

            FROM FACT_CASE_USER_DAY;

 

           if SQLCODE=100

               then  exit;

           end if;

  insert into tb1 (col1,col2) values(l_name,l_rpt_user_id);

 end foreach;

 

 

 

 

 

 

 

 

17.存储过程  — EXCEPTION     

18.游标的处理——cursor

oracle:

CURSOR cursor1

   IS

   SELECT RPT_NAME,RPT_USER_ID

            FROM FACT_CASE_USER_DAY;

    OPEN cursor1;

         LOOP

              FETCH cursor1

           INTO l_name,l_rpt_user_id;

           EXIT WHEN cursor1%NOTFOUND;

 insert into tb1 (col1,col2)   values(l_name,l_rpt_user_id);

 

  END LOOP;

  CLOSE cursor1;

 DS(显性):

prepare mycur from  'SELECT RPT_NAME,RPT_USER_ID

            FROM FACT_CASE_USER_DAY';

declare attach_lists cursor for mycur ;

 open attach;

loop

fetch attach into l_name_1, l_rpt_user_id_1;

      if SQLCODE=100

            then  exit;

       end if;

 insert into tb1 (col1,col2)  values(l_name_1,l_rpt_user_id_1);

end loop;

close myCur;

 

 

DS(隐形):

define   l_name varchar(20);

define   l_rpt_user_id integer;

 

  foreach SELECT RPT_NAME,RPT_USER_ID

           into l_name,l_rpt_user_id

            FROM FACT_CASE_USER_DAY;

 

           if SQLCODE=100

               then  exit;

           end if;

  insert into tb1 (col1,col2) values(l_name,l_rpt_user_id);

  

 end foreach;

19.动态sql 的处理

Oracle:

 SELECT  item_name, REPLACE (exec_sql, '@DEPART_ID', v_depart_id)

           INTO   l_item_name, l_exec_sql

           FROM   stat_comm_item_cur

          WHERE   item_id = '12';

 

         EXECUTE IMMEDIATE l_exec_sql  INTO   l_item_value;

DS:

SELECT   item_name, REPLACE (exec_sql, '@DEPART_ID', v_depart_id)

           INTO   l_item_name, l_exec_sql

           FROM   stat_comm_item_cur

          WHERE   item_id = '12';

      drop table if exists tb1;

      let exec_sql_1 = l_exec_sql || 'into temp tb1 with no log';

 

         EXECUTE IMMEDIATE exec_sql_1;

 select l_exec_sql into l_item_value from tb1;

 

20.分页

 oracleselect * from (select rownum as rn   from table_a ) where   rn>=4 and rn<=10;  --              

                                 从第四条开始取,到第10条结束,共7

 

DS:   (1)select skip 3 * from (select  first 10  *  from table_a )

      (2)select skip 3 first 7 * from table_a;    -- 越过前3条,连续取7

 

转载于:https://www.cnblogs.com/zhouboke/p/6409041.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值