静态SQL
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| SELECT | 支持,有差异 | GaussDB和Oracle在某些场景下有不同。 GaussDB中FOR SHARE对检索出来的行加共享锁,不同事务的共享锁不会互相阻塞。若数据在一个事务中被FOR SHARE锁定,在另一个事务中使用SELECT FOR SHARE SKIP LOCKED时,SKIP LOCKED不会跳过锁。 |
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| INSERT | 支持,有差异 |
|
| UPDATE | 支持 | - |
| DELETE | 支持 | - |
| MERGE | 支持 | - |
| LOCK TABLE | 支持 | - |
| INSERT ALL | 支持,有差异 |
|
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| COMMIT | 支持 | - |
| ROLLBACK | 支持 | - |
| SAVEPOINT | 支持 | - |
| SET TRANSACTION | 支持,有差异 | GaussDB不支持NAME string语法、USE ROLLBACK SEGMENT rollback_segment语法。 |
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| CURRVAL and NEXTVAL | 支持 | - |
| LEVEL | 不支持 | - |
| OBJECT_VALUE | 不支持 | - |
| ROWID | 支持 | - |
| ROWNUM | 支持,有差异 | 不推荐ROWNUM条件用于JOIN ON子句。 GaussDB中ROWNUM条件用于JOIN ON子句时在LEFT JOIN、RIGHT JOIN、FULL JOIN场景下和MERGE INTO场景下与其他数据库行为不一致,直接进行业务迁移存在风险。 |
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| SQL%FOUND | 支持,有差异 | GaussDB在commit/rollback之后不刷新隐式游标结果,Oracle会在commit/rollback之后刷新隐式游标结果。 |
| SQL%NOTFOUND | 支持,有差异 | |
| SQL%ROWCOUNT | 支持,有差异 | |
| SQL%ISOPEN | 支持,有差异 | |
| SQL%BULK_ROWCOUNT | 不支持 | |
| SQL%BULK_EXCEPTIONS | 不支持 |
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| CURSOR cursor_name [ parameter_list ] RETURN return_type; | 支持 | - |
| CURSOR cursor_name [ parameter_list ] [ RETURN return_type ] IS select_statement; | 支持 | - |
| OPEN | 支持 | - |
| CLOSE | 支持,有差异 | GaussDB在exception内部会自动关闭,Oracle在exception内部不会自动关闭。 |
| FETCH | 支持 | - |
| CURRENT OF CURSOR | 支持 | - |
| Oracle数据库 | GaussDB数据库 |
|---|---|
| SQL%FOUND | 支持 |
| SQL%NOTFOUND | 支持 |
| SQL%ROWCOUNT | 支持 |
| SQL%ISOPEN | 支持 |
| Oracle数据库 | GaussDB数据库 |
|---|---|
| FOR LOOP | 支持,有差异。 对于FORALL + BULK COLLECT INTO场景下, INTO变量在GaussDB中仅返回单条DML语句执行结果,在Oracle中返回DML语句累计执行结果。 |
| Oracle数据库 | GaussDB数据库 |
|---|---|
| 存储过程 | 支持 |
| 匿名块 | 支持 |
| 函数 | 支持 |
| Package | 支持 |