77
88== 目的
99
10- PostgreSQL支持函数(FUNCTION)和存储过程(PROCEDURE),但是在语法上和Oracle有差异,为了让Oracle的PLSQL语句可以执行在IvorySQL上执行 ,也就是“语法兼容”,IvorySQL采取这样的解决方案:如果Oracle的子句在IvorySQL中存在相同功能的子句,则直接映射为对应的IvorySQL子句,否则只实现其语法,不实现其功能。
10+ PostgreSQL支持函数(FUNCTION)和存储过程(PROCEDURE),但是在语法上和Oracle有差异,为了让Oracle的PLSQL语句可以在IvorySQL上执行 ,也就是“语法兼容”,IvorySQL采取这样的解决方案:如果Oracle的子句在IvorySQL中存在相同功能的子句,则直接映射为对应的IvorySQL子句,否则只实现其语法,不实现其功能。
1111
1212== 兼容支持
1313
1414具体的Oracle兼容支持包括以下几个方面:
1515
16- === 1. CREATE FUNCTION语法支持EDITIONABLE /NONEDITIONABLE
16+ === CREATE FUNCTION 语法支持 EDITIONABLE /NONEDITIONABLE
1717
1818```
19- CREATE or replace FUNCTION ora_func RETURN integer AS
20- BEGIN
19+ CREATE or replace EDITIONABLE FUNCTION ora_func RETURN integer AS
20+ BEGIN
2121 RETURN 1;
2222END;
2323/
24- CREATE FUNCTION
2524
26- select ora_func() from dual;
27- ora_func
28- ----------
29- 1
30- (1 row)
25+ CREATE or replace NONEDITIONABLE FUNCTION ora_func RETURN integer IS
26+ BEGIN
27+ RETURN 1;
28+ END;
29+ /
3130```
3231
33- === 2. CREATE FUNCTION语法支持RETURN, IS关键字 ,无需指定语言
32+ === CREATE FUNCTION 语法支持 RETURN/IS 关键字 ,无需指定语言
3433
3534```
3635CREATE or replace EDITIONABLE FUNCTION ora_func RETURN integer IS
4039/
4140```
4241
43- === 3. CREATE FUNCTION语法函数没有参数 ,函数名后面不带()
42+ === CREATE FUNCTION 语法函数没有参数 ,函数名后面不带()
4443
4544```
4645CREATE or replace FUNCTION ora_func RETURN integer
5251/
5352```
5453
55- === 4. CREATE FUNCTION参数个数增加 ,最大值可在configure时指定
54+ === CREATE FUNCTION 参数个数增加 ,最大值可在configure时指定
5655
5756```
5857configure --help
5958 --with-max-funarg=MAXFUNARG
6059```
6160
62- === 5. CREATE FUNCTION语法中END ; 在psql中以/结束
61+ === CREATE FUNCTION 语法中 END ; 在psql中以/结束
6362
6463```
6564CREATE or replace EDITIONABLE FUNCTION ora_func RETURN integer IS
6968/
7069```
7170
72- === 6. CREATE FUNCTION语法变量声明前面没有DECLARE关键字
71+ === CREATE FUNCTION 语法变量声明前面没有 DECLARE 关键字
7372
7473```
7574CREATE OR REPLACE
@@ -95,7 +94,7 @@ select ora_func(5,9)from dual;
9594(1 row)
9695```
9796
98- === 7. CREATE FUNCTION语法支持OUT 参数NOCOPY功能
97+ === CREATE FUNCTION 语法支持 OUT 参数 NOCOPY 功能
9998
10099```
101100CREATE OR REPLACE FUNCTION test_nocopy(a IN int, b OUT NOCOPY int, c IN OUT NOCOPY int)
109108/
110109```
111110
112- === 8. CREATE FUNCTION语法支持sharing_clause子句
111+ === CREATE FUNCTION 语法支持 sharing 子句
113112
114113```
115114CREATE or replace FUNCTION ora_func RETURN integer
129128/
130129```
131130
132- === 9. CREATE FUNCTION语法支持invoker_rights_clause,默认权限改成DR (DEFINER)
131+ === CREATE FUNCTION 语法支持 invoker_rights (AUTHID) 子句,默认权限改成 DR (DEFINER)
133132
134133```
135134CREATE or replace FUNCTION ora_func RETURN integer
@@ -139,6 +138,7 @@ BEGIN
139138 RETURN 1;
140139END;
141140/
141+
142142CREATE or replace FUNCTION ora_func RETURN integer
143143SHARING = NONE AUTHID DEFINER
144144IS
148148/
149149```
150150
151- === 10. CREATE FUNCTION语法支持ACCESSIBLE BY
151+ === CREATE FUNCTION 语法支持 ACCESSIBLE BY
152152
153153```
154154CREATE or replace FUNCTION ora_func RETURN integer
191191/
192192```
193193
194- === 11. CREATE FUNCTION语法支持DEFAULT COLLATION
194+ === CREATE FUNCTION 语法支持 DEFAULT COLLATION
195195
196196```
197197CREATE or replace FUNCTION ora_func RETURN integer
205205/
206206```
207207
208- === 12. CREATE FUNCTION语法支持deterministic_clause,功能与IvorySQL的IMMUTABLE相同
208+ === CREATE FUNCTION 语法支持 deterministic 子句,功能与 IvorySQL 的 IMMUTABLE 相同
209209
210210```
211211CREATE or replace FUNCTION ora_func RETURN integer
220220/
221221```
222222
223- === 13. CREATE FUNCTION语法支持parallel_enable_clause,功能与IvorySQL的PARALLEL SAFE相同
223+ === CREATE FUNCTION 语法支持 parallel_enable 子句,功能与 IvorySQL 的 PARALLEL SAFE 相同
224224
225225```
226226CREATE or replace FUNCTION ora_func RETURN integer
236236/
237237```
238238
239- === 14. CREATE FUNCTION语法支持result_cache_clause子句
239+ === CREATE FUNCTION 语法支持 result_cache 子句
240240
241241```
242242CREATE or replace FUNCTION ora_func RETURN integer
277277/
278278```
279279
280- === 15. CREATE FUNCTION语法支持aggregate_clause子句
280+ === CREATE FUNCTION 语法支持 aggregate 子句
281281
282282```
283283CREATE or replace FUNCTION ora_func RETURN integer
308308/
309309```
310310
311- === 16. CREATE FUNCTION语法支持pipelined_clause子句
311+ === CREATE FUNCTION 语法支持 pipelined 子句
312312
313313```
314314CREATE or replace FUNCTION ora_func RETURN integer
327327/
328328```
329329
330- === 17. CREATE FUNCTION语法支持sql_macro_clause子句
330+ === CREATE FUNCTION 语法支持 sql_macro 子句
331331
332332```
333333CREATE or replace FUNCTION ora_func RETURN integer
347347/
348348```
349349
350- === 18. ALTER FUNCTION语法兼容
350+ === ALTER FUNCTION 语法兼容
351351
352352```
353353alter function public.test_func noneditionable;
@@ -357,7 +357,7 @@ alter function test_func compile debug sd = mv;
357357alter function test_func compile debug reuse settings;
358358```
359359
360- === 19. CREATE PROCEDURE语法支持EDITIONABLE/ NONEDITIONABLE
360+ === CREATE PROCEDURE 语法支持 EDITIONABLE / NONEDITIONABLE
361361
362362```
363363CREATE OR REPLACE EDITIONABLE PROCEDURE ora_procedure
377377/
378378```
379379
380- === 20. CREATE PROCEDURE语法函数没有参数 ,函数名后面不带()
380+ === CREATE PROCEDURE 语法函数没有参数 ,函数名后面不带()
381381
382382```
383383CREATE OR REPLACE EDITIONABLE PROCEDURE ora_procedure
@@ -389,10 +389,10 @@ end;
389389/
390390```
391391
392- === 21. CREATE PROCEDURE语法中END ; 在psql中以/ 结束
392+ === CREATE PROCEDURE 语法中 END ; 在psql中以 / 结束
393393
394394```
395- CREATE OR REPLACE EDITIONABLE PROCEDURE ora_procedure
395+ CREATE OR REPLACE PROCEDURE ora_procedure
396396IS
397397 p integer := 20;
398398begin
401401/
402402```
403403
404- === 22. CREATE PROCEDURE语法支持sharing_clause子句
404+ === CREATE PROCEDURE 语法支持 sharing 子句
405405
406406```
407407CREATE OR REPLACE PROCEDURE ora_procedure
422422/
423423```
424424
425- === 23. CREATE PROCEDURE语法支持DEFAULT COLLATION子句
425+ === CREATE PROCEDURE 语法支持 DEFAULT COLLATION 子句
426426
427427```
428428CREATE OR REPLACE PROCEDURE ora_procedure
436436/
437437```
438438
439- === 24. CREATE PROCEDURE语法支持invoker_rights_clause子句
439+ === CREATE PROCEDURE 语法支持 invoker_rights (AUTHID) 子句
440440
441441```
442442CREATE OR REPLACE PROCEDURE ora_procedure
461461/
462462```
463463
464- === 25. CREATE PROCEDURE语法支持ACCESSIBLE BY子句
464+ === CREATE PROCEDURE 语法支持 ACCESSIBLE BY 子句
465465
466466```
467467CREATE OR REPLACE PROCEDURE ora_procedure
521521/
522522```
523523
524- === 26. ALTER PROCEDURE语法兼容
524+ === ALTER PROCEDURE 语法兼容
525525
526526```
527527alter procedure test_proc editionable;
@@ -532,7 +532,7 @@ alter procedure test_proc compile debug sd = mv;
532532alter procedure test_proc compile debug reuse settings;
533533```
534534
535- === 27. 存储过程和函数没有参数,SELECT调用支持不带()
535+ === 存储过程和函数没有参数,SELECT调用支持不带 ()
536536
537537```
538538create or replace function f_noparentheses
@@ -552,12 +552,12 @@ end;
552552CALL protest();
553553```
554554
555- === 28. 函数和存储过程相关的视图
555+ === 函数和存储过程相关的视图
556556
557557```
558558相关视图位于文件 contrib/ivorysql_ora/src/sysview/sysview--1.0.sql 中,包括DBA_PROCEDURES,ALL_PROCEDURES,USER_PROCEDURES,DBA_SOURCE,ALL_SOURCE,USER_SOURCE,DBA_ARGUMENTS,ALL_ARGUMENTS,USER_ARGUMENTS等。
559559```
560560
561- === 29. 支持--和/**/两种注释方法。
561+ === 支持--和/**/两种注释方法
562562
563- === 30. pg_dump备份SQL脚本文件的备份格式时,在函数的定义最后增加一个斜线 /。
563+ === pg_dump备份SQL脚本文件的备份格式时,在函数的定义最后增加一个斜线 /
0 commit comments