伪列
本节主要介绍Oracle伪列的迁移语法。迁移语法决定了关键字/功能的迁移方式。
伪列与表的列类似,但不存储在表中。用户可在伪列中进行SELECT操作,但无法插入、更新、或删除其中的值。
ROWID
ROWID伪列返回特定行的具体地址。
![](https://support.huaweicloud.com/tg-dws/figure/zh-cn_image_0000001658025254.png)
![](https://support.huaweicloud.com/tg-dws/figure/zh-cn_image_0000001657865930.png)
ROWNUM
对于查询返回的每行数据,ROWNUM伪列段会返回一个数字,表示Oracle从一个表或一组连接的行中选择行的顺序。选择的第一行的ROWNUM为1,第二行为2,以此类推。
![](https://support.huaweicloud.com/tg-dws/figure/zh-cn_image_0000001658025258.png)
![](https://support.huaweicloud.com/tg-dws/figure/zh-cn_image_0000001657865926.png)
输入:ROWNUM,使用UPDATE
执行UPDATE时,如果使用了具有某个值(整数)的ROWNUM,系统将根据ROWNUM附近使用的运算符更新记录。
1 2 3 4 5 |
UPDATE SCMS_MSGPOOL_LST SET MSG_STD = '11' WHERE UNISEQNO = IN_OUNISEQNO AND MSG_TYP1 IN ('MT103', 'MT199') AND ROWNUM = 1; |
输出
1 2 3 4 5 6 7 |
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附近的运算符依次删除记录。
1 2 |
delete from test1 where c1='abc' and rownum = 1; |
输出
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,高斯不支持。
1 2 3 4 5 |
UPDATE SCMS_MSGPOOL_LST SET MSG_STD = '11' WHERE UNISEQNO = IN_OUNISEQNO AND MSG_TYP1 IN ('MT103', 'MT199') AND ROWNUM = 1; |
输出
1 2 3 4 5 6 7 8 |
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
1 2 3 4 5 |
DELETE FROM SPMS_APP_PUBLISH WHERE NOVA_NO = IN_NOVA_NO AND DELIVERY_TYPE = '1' AND PUBLISH_DATE = IN_PUBLISH_DATE AND ROWNUM = 1; |
输出
1 2 3 4 5 6 7 8 |
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 ); |