华为云云数据库GaussDBPL/SQL语言_云淘科技
GaussDB数据库基本兼容的PL/SQL操作符、表达式,控制语句、集合和record等等,不支持预定义的PL/SQL常量和类型、子类型等。
PL/SQL基本语法
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
+ |
支持 |
– |
2 |
:= |
支持 |
– |
3 |
=> |
支持 |
– |
4 |
% |
支持 |
– |
5 |
‘ |
支持 |
– |
6 |
. |
支持 |
– |
7 |
|| |
支持 |
– |
8 |
/ |
支持 |
– |
9 |
** |
不支持 |
– |
10 |
( |
支持 |
– |
11 |
) |
支持 |
– |
12 |
: |
支持 |
– |
13 |
, |
支持 |
– |
14 |
<< |
支持 |
– |
15 |
>> |
支持 |
– |
16 |
/* |
支持 |
– |
17 |
*/ |
支持 |
– |
18 |
* |
支持 |
– |
19 |
“ |
支持 |
– |
20 |
.. |
支持 |
– |
21 |
= |
支持 |
– |
22 |
支持 |
– |
|
23 |
!= |
支持 |
– |
24 |
~= |
支持 |
– |
25 |
^= |
支持 |
– |
26 |
< |
支持 |
– |
27 |
> |
支持 |
– |
28 |
<= |
支持 |
– |
29 |
>= |
支持 |
– |
30 |
@ |
支持 |
– |
31 |
— |
支持 |
– |
32 |
; |
支持 |
– |
33 |
– |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
NOT |
支持 |
– |
2 |
AND |
支持 |
– |
3 |
OR |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
IS [NOT] NULL |
支持 |
– |
2 |
LIKE |
支持 |
– |
3 |
BETWEEN |
支持 |
– |
4 |
IN |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
simple CASE |
支持 |
– |
2 |
searched CASE |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
%TYPE |
支持 |
– |
2 |
%ROWTYPE |
支持,有差异 |
GaussDB在多个CN的环境下,存储过程中无法声明临时表的%ROWTYPE及%TYPE属性。因为临时表仅在当前session有效,在编译阶段其他CN无法看到当前CN的临时表。故多个CN的环境下,会提示该临时表不存在。 |
数据类型兼容性
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
3 |
CHARACTER |
支持 |
– |
4 |
VARCHAR |
支持 |
– |
5 |
STRING |
不支持 |
– |
6 |
PLS_INTEGER |
不支持 |
– |
7 |
BINARY_INTEGER |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
SUBTYPE subtype_name IS base_type |
不支持 |
– |
2 |
SUBTYPE subtype_name IS base_type { precision [, scale ] | RANGE low_value .. high_value } [ NOT NULL ] |
不支持 |
– |
3 |
SUBTYPE subtype_name IS base_type [ NOT NULL ] |
不支持 |
– |
控制语句
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
IF THEN |
支持 |
– |
2 |
IF THEN ELSE |
支持 |
– |
3 |
IF THEN ELSIF |
支持 |
– |
4 |
simple CASE: CASE selector WHEN selector_value_1 THEN statements_1 WHEN selector_value_2 THEN statements_2 … WHEN selector_value_n THEN statements_n [ ELSE else_statements END CASE;] |
支持 |
– |
5 |
searched CASE: CASE WHEN condition_1 THEN statements_1 WHEN condition_2 THEN statements_2 … WHEN condition_n THEN statements_n [ ELSE else_statements END CASE;] |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
[ label ] LOOP statements END LOOP [ label ]; |
支持 |
– |
2 |
EXIT; |
支持 |
– |
3 |
EXIT WHEN; |
支持 |
– |
4 |
CONTINUE; |
支持 |
– |
5 |
CONTINUE WHEN; |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
[ label ] FOR index IN [ REVERSE ] lower_bound..upper_bound LOOP statements END LOOP [ label ]; |
支持 |
– |
2 |
EXIT WHEN; |
支持 |
– |
3 |
CONTINUE WHEN; |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
[ label ] WHILE condition LOOP statements END LOOP [ label ]; |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
GOTO |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
NULL |
支持 |
– |
集合和record
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
Associative array (or index-by table) |
支持 |
– |
2 |
VARRAY (variable-size array) |
支持 |
– |
3 |
Nested table |
支持 |
– |
4 |
record |
支持 |
– |
序号 |
类型 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|---|
1 |
Associative array (or index-by table) |
TABLE OF datatype [ NOT NULL ] INDEX BY { PLS_INTEGER | BINARY_INTEGER | VARCHAR2 ( v_size ) | data_type } |
支持,有差异 |
GaussDB不支持 PLS_INTEGER类型,GaussDB内data_type可以为基础数据类型、或存储过程内定义的record类型、集合类型、数组类型,不支持ref cursor类型。 GaussDB内NOT NULL只支持语法不支持功能。 |
2 |
VARRAY (variable-size array) |
{ VARRAY | [ VARYING ] ARRAY } ( size_limit ) OF datatype [ NOT NULL ] |
支持,有差异 |
GaussDB内不支持not null,不支持datatype为varray类型(varray不能嵌套)。 |
3 |
Nested table |
TABLE OF datatype [ NOT NULL ] |
支持,有差异 |
GaussDB内NOT NULL只支持语法不支持功能。 |
4 |
record |
TYPE record_type IS RECORD ( field_definition [, field_definition]… ) ; |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
collection_type ( [ value [, value ]… ] ) |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
Associative array (or index-by table) |
支持 |
– |
2 |
VARRAY (variable-size array) |
支持,有差异 |
GaussDB不同类型的数据可以赋值。 |
3 |
Nested table |
支持 |
– |
4 |
record |
支持,有差异 |
GaussDB不同类型的数据可以赋值。 |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
= |
支持,有差异 |
在比较字符串时结果有差异;只支持集合的等值(=)与非等值(或!=)比较,不支持其他关系运算和算数运算操作。 |
2 |
支持,有差异 |
在比较字符串时结果有差异;只支持集合的等值(=)与非等值(或!=)比较,不支持其他关系运算和算数运算操作。 |
|
3 |
IS[NOT] NULL |
支持 |
– |
4 |
^= |
支持,有差异 |
在比较字符串时结果有差异。 |
5 |
~= |
不支持 |
– |
6 |
IS[NOT] A SET |
不支持 |
– |
7 |
IS [NOT] EMPTY |
不支持 |
– |
8 |
expr [ NOT ] MEMBER [ OF ] nested_table |
不支持 |
– |
9 |
nested_table1 [ NOT ] SUBMULTISET [ OF ] nested_table2 |
不支持 |
– |
10 |
[NOT] IN |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
MULTISET UNION [ALL | DISTINCT] |
支持 |
– |
2 |
MULTISET EXCEPT [ALL | DISTINCT] |
支持 |
– |
3 |
MULTISET INTERSECT [ALL | DISTINCT] |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
exists(idx) |
支持 |
– |
2 |
extend[(count[, idx])] |
支持,有差异 |
GaussDB仅支持nesttable类型。 |
3 |
delete[(idx1[, idx2])] |
支持 |
– |
4 |
trim[(n)] |
支持,有差异 |
GaussDB仅支持nesttable类型。 |
5 |
count |
支持 |
– |
6 |
first |
支持 |
– |
7 |
last |
支持 |
– |
8 |
prior(idx) |
支持 |
– |
9 |
next(idx) |
支持 |
– |
10 |
limit |
支持,有差异 |
用于nesttable类型,返回集合中最大可以储存的元素个数,只适用于array类型,nesttable返回空。 |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
构造器 |
支持 |
– |
2 |
%ROWTYPE声明变量 |
支持 |
– |
3 |
定义常量constant |
不支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
IS NULL |
支持 |
– |
2 |
= |
支持 |
– |
3 |
> |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
unnest_table(anynesttable) |
支持 |
– |
2 |
unnest_table(anyindexbytable) |
支持 |
– |
静态SQL
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
SELECT |
支持,有差异 |
FOR SHARE对检索出来的行加共享锁,不同事务的共享锁不会互相阻塞,若数据在一个事务中被FOR SHARE锁定,在另一个事务中使用SELECT FOR SHARE SKIP LOCKED时,SKIP LOCKED不会跳过锁。 |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
INSERT |
支持 |
– |
2 |
UPDATE |
支持 |
– |
3 |
DELETE |
支持 |
– |
4 |
MERGE |
支持 |
– |
5 |
LOCK TABLE |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
COMMIT |
支持 |
– |
2 |
ROLLBACK |
支持 |
– |
3 |
SAVEPOINT |
支持 |
– |
4 |
SET TRANSACTION |
支持,有差异 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
CURRVAL and NEXTVAL |
支持 |
– |
2 |
LEVEL |
支持 |
– |
3 |
OBJECT_VALUE |
不支持 |
– |
4 |
ROWID |
不支持 |
– |
5 |
ROWNUM |
支持,有差异 |
不推荐ROWNUM条件用于JOIN ON子句,GaussDB中ROWNUM条件用于JOIN ON子句时在LEFT JOIN、RIGHT JOIN、FULL JOIN场景下和MERGE INTO场景下与其他数据库行为不一致,直接进行业务迁移存在风险。 |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
SQL%FOUND |
支持 |
– |
2 |
SQL%NOTFOUND |
支持 |
– |
3 |
SQL%ROWCOUNT |
支持 |
– |
4 |
SQL%ISOPEN |
支持 |
– |
5 |
SQL%BULK_ROWCOUNT |
不支持 |
– |
6 |
SQL%BULK_EXCEPTIONS |
不支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
CURSOR cursor_name [ parameter_list ] RETURN return_type; |
支持 |
– |
2 |
CURSOR cursor_name [ parameter_list ] [ RETURN return_type ] IS select_statement; |
支持 |
– |
3 |
OPEN |
支持 |
– |
4 |
CLOSE |
支持 |
– |
5 |
FETCH |
支持 |
– |
6 |
CURRENT OF CURSOR |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
SQL%FOUND |
支持 |
– |
2 |
SQL%NOTFOUND |
支持 |
– |
3 |
SQL%ROWCOUNT |
支持 |
– |
4 |
SQL%ISOPEN |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
FOR LOOP |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
存储过程 |
支持 |
– |
2 |
匿名块 |
支持 |
– |
3 |
函数 |
支持 |
– |
4 |
Package |
支持 |
– |
动态SQL
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
EXECUTE IMMEDIATE |
支持 |
– |
2 |
OPEN FOR、FETCH 、CLOSE |
支持 |
– |
trigger
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
DML TRIGGER |
支持,有差异 |
不支持Compound DML Triggers。 |
2 |
SYSTEM TRIGGER |
不支持 |
– |
语法类型 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
create语法 |
CREATE [ OR REPLACE ] [ EDITIONABLE | NONEDITIONABLE ] TRIGGER plsql_trigger_source |
支持,有差异 |
不支持OR REPLACE 、EDITIONABLE | NONEDITIONABLE、plsql_trigger_source部分支持。 |
plsql_trigger_source ::= |
[schema.] trigger_name [ sharing_clause ] [ default_collation_clause ] { simple_dml_trigger | instead_of_dml_trigger | compound_dml_trigger | system_trigger } |
支持,有差异 |
不支持schema.、 sharing_clause、default_collation_clause。 |
simple_dml_trigger ::= |
{ BEFORE | AFTER } dml_event_clause [ referencing_clause ] [ FOR EACH ROW ] [ trigger_edition_clause ] [ trigger_ordering_clause ] [ ENABLE | DISABLE ] [ WHEN ( condition ) ] trigger_body |
支持,有差异 |
不支持referencing_clause、referencing_clause(用from referencing_table代替)、trigger_edition_clause、trigger_ordering_clause、 ENABLE | DISABLE;部分支持trigger_body。 |
dml_event_clause ::= |
{ DELETE | INSERT | UPDATE [ OF column [, column ]… ] } [ OR { DELETE | INSERT | UPDATE [ OF column [, column]… ] }… ON [ schema.] { table | view } |
不支持 |
– |
trigger_body ::= |
{ plsql_block | CALL routine_clause } |
支持,有差异 |
不支持plsql_block,仅支持EXECUTE PROCEDURE function_name ( arguments );方式执行func,并且func需要用户定义,必须声明为不带参数并返回类型为触发器,在触发器触发时执行。 |
instead_of_dml_trigger ::= |
INSTEAD OF { DELETE | INSERT | UPDATE } [ OR { DELETE | INSERT | UPDATE } ]… ON [ NESTED TABLE nested_table_column OF ] [ schema. ] noneditioning_view [ referencing_clause ] [ FOR EACH ROW ] [ trigger_edition_clause ] [ trigger_ordering_clause ] [ ENABLE | DISABLE ] trigger_body |
支持,有差异 |
不支持NESTED TABLE nested_table_column OF、referencing_clause、trigger_edition_clause、trigger_ordering_clause、ENABLE | DISABLE。 |
compound_dml_trigger ::= |
CREATE trigger FOR dml_event_clause ON view COMPOUND TRIGGER INSTEAD OF EACH ROW IS BEGIN statement; END INSTEAD OF EACH ROW; |
不支持 |
– |
system_trigger ::= |
{ BEFORE | AFTER | INSTEAD OF } { ddl_event [OR ddl_event]… | database_event [OR database_event ]… } ON { [schema.] SCHEMA | [ PLUGGABLE ] DATABASE } [ trigger_ordering_clause ] [ ENABLE | DISABLE ] trigger_body |
不支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
ALTER TRIGGER [ schema. ] trigger_name { trigger_compile_clause | { ENABLE | DISABLE } | RENAME TO new_name | { EDITIONABLE | NONEDITIONABLE } } ; |
支持,有差异 |
不支持schema.、trigger_compile_clause、{ ENABLE | DISABLE }、{ EDITIONABLE | NONEDITIONABLE }。 |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
DROP TRIGGER [ schema. ] trigger ; |
支持,有差异 |
不支持schema。 |
Oracle数据库名为*_TRIGGERS的视图统计了trigger的相关信息,视图具体差异参考系统视图章节。
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
nested subprogram(子块) |
支持,有差异 |
不支持重载,不支持定义为自治事务,不支持SETOF的使用,仅限一个限定符引用嵌套子程序或嵌套子程序的变量。 |
2 |
package subprogram |
支持 |
– |
3 |
standalone subprogram(包含Function & Procedure) |
支持 |
– |
4 |
匿名块 |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
Function |
支持 |
– |
2 |
Procedure |
支持 |
– |
3 |
匿名块 |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
DETERMINISTIC |
支持,有差异 |
GaussDB中为IMMUTABLE。 |
2 |
PARALLEL_ENABLE |
不支持 |
– |
3 |
PIPELINED |
不支持 |
– |
4 |
RESULT_CACHE |
不支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
IN |
支持 |
– |
2 |
OUT |
支持 |
– |
3 |
IN OUT |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
CREATE FUNCTION |
支持 |
– |
2 |
CREATE LIBRARY |
不支持 |
– |
3 |
CREATE PACKAGE |
支持 |
– |
4 |
CREATE PACKAGE BODY |
支持 |
– |
5 |
CREATE PROCEDURE |
支持 |
– |
6 |
CREATE TRIGGER |
支持 |
– |
7 |
CREATE TYPE |
支持,有差异 |
支持类型不同。 |
8 |
CREATE TYPE BODY |
不支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
ALTER FUNCTION |
支持 |
– |
2 |
ALTER LIBRARY |
不支持 |
– |
3 |
ALTER PACKAGE |
支持 |
– |
4 |
ALTER PROCEDURE |
支持 |
– |
5 |
ALTER TRIGGER |
支持 |
– |
6 |
ALTER TYPE |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
DROP FUNCTION |
支持 |
– |
2 |
DROP LIBRARY |
不支持 |
– |
3 |
DROP PACKAGE |
支持 |
– |
4 |
DROP PROCEDURE |
支持 |
– |
5 |
DROP TRIGGER |
支持 |
– |
6 |
DROP TYPE |
支持 |
– |
7 |
DROP TYPE BODY |
不支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
ACCESSIBLE BY |
不支持 |
– |
2 |
AGGREGATE |
支持 |
– |
3 |
DETERMINISTIC |
支持,有差异 |
– |
4 |
PIPE ROW |
不支持 |
– |
5 |
PIPELINED |
不支持 |
– |
6 |
SQL_MACRO |
不支持 |
– |
7 |
RESTRICT_REFERENCES |
不支持 |
– |
8 |
INLINE |
支持,有差异 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
EXCEPTION_INIT |
支持,有差异 |
不支持与系统错误码进行绑定。 |
2 |
Exception |
支持 |
– |
3 |
Exception Handler |
支持 |
– |
4 |
SQLCODE |
支持 |
– |
5 |
SQLERRM |
支持 |
– |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
COVERAGE |
不支持 |
– |
2 |
COLLATION |
支持 |
– |
3 |
DEPRECATE |
不支持 |
– |
4 |
FORALL |
支持 |
– |
5 |
NOCOPY |
不支持 |
– |
6 |
RETURNING INTO |
支持,有差异 |
列存表不支持 |
7 |
SERIALLY_REUSABLE |
不支持 |
– |
8 |
SHARING |
不支持 |
– |
9 |
UDF |
支持,有差异 |
java UDF只支持分布式 |
10 |
BULK COLLECT |
支持 |
– |
父主题: 分布式
同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家