更新时间:2022-12-08 GMT+08:00
伪列
本节主要介绍Oracle伪列的迁移语法。迁移语法决定了关键字/功能的迁移方式。
伪列与表的列类似,但不存储在表中。用户可在伪列中进行SELECT操作,但无法插入、更新、或删除其中的值。
ROWID
ROWID伪列返回特定行的具体地址。
图1 输入:ROWID
图2 输出:ROWID
ROWNUM
对于查询返回的每行数据,ROWNUM伪列段会返回一个数字,表示Oracle从一个表或一组连接的行中选择行的顺序。选择的第一行的ROWNUM为1,第二行为2,以此类推。
图3 输入:ROWNUM
图4 输出:ROWNUM
输入:ROWNUM,使用UPDATE
执行UPDATE时,如果使用了具有某个值(整数)的ROWNUM,系统将根据ROWNUM附近使用的运算符更新记录。
UPDATE SCMS_MSGPOOL_LST SET MSG_STD = '11' WHERE UNISEQNO = IN_OUNISEQNO AND MSG_TYP1 IN ('MT103', 'MT199') AND ROWNUM = 1;
输出
UPDATE SCMS_MSGPOOL_LST SET MSG_STD = '11' WHERE (xc_node_id,ctid) in (select xc_node_id, ctid from SCMS_MSGPOOL_LST where UNISEQNO = IN_OUNISEQNO AND MSG_TYP1 IN ('MT103', 'MT199') LIMIT 1)
输入:ROWNUM,使用DELETE
执行DELETE时,如果使用了具有某个值(整数)的ROWNUM,系统将根据ROWNUM附近的运算符依次删除记录。
delete from test1 where c1='abc' and rownum = 1;
输出
delete from test1 where (xc_node_id,ctid) in (select xc_node_id, ctid from test1 where c1='abc' limit 1);
输入:UPDATE,使用ROWNUM
使用ROWNUM迁移的UPDATE和DELETE脚本包含LIMIT,高斯不支持。
UPDATE SCMS_MSGPOOL_LST SET MSG_STD = '11' WHERE UNISEQNO = IN_OUNISEQNO AND MSG_TYP1 IN ('MT103', 'MT199') AND ROWNUM = 1;
输出
UPDATE SCMS_MSGPOOL_LST SET MSG_STD = '11' WHERE (xc_node_id, ctid) = ( SELECT xc_node_id, ctid FROM SCMS_MSGPOOL_LST WHERE UNISEQNO = IN_OUNISEQNO AND MSG_TYP1 IN ('MT103', 'MT199') LIMIT 1 );
输入:DELETE,使用ROWNUM
DELETE FROM SPMS_APP_PUBLISH WHERE NOVA_NO = IN_NOVA_NO AND DELIVERY_TYPE = '1' AND PUBLISH_DATE = IN_PUBLISH_DATE AND ROWNUM = 1;
输出
DELETE FROM SPMS_APP_PUBLISH WHERE (xc_node_id, ctid) IN (SELECT xc_node_id, ctid FROM SPMS_APP_PUBLISH WHERE NOVA_NO = IN_NOVA_NO AND DELIVERY_TYPE = '1' AND PUBLISH_DATE = IN_PUBLISH_DATE LIMIT 1 );
父主题: Oracle语法迁移