这节很基础,却发现了Oracle的可爱之处,一个函数调用就提供了这么多选项,学起来真够累的!
1. 在PL/SQL中调用函数表示法
SQL> /* Formatted on 2018/12/4 0:08:00 (QP5 v5.256.13226.35538) */
SQL> CREATE OR REPLACE FUNCTION add_three_numbers (a NUMBER := 0,
2 b NUMBER := 0,
3 c NUMBER := 0)
4 RETURN NUMBER
5 IS
6 BEGIN
7 RETURN a + b + c;
8 END;
9 /
函数已创建。
--位置表示法(Positional Notation)
SQL> BEGIN
2 DBMS_OUTPUT.put_line (add_three_numbers (3, 4, 5));
3 END;
4 /
12
PL/SQL 过程已成功完成。
--命名表示法(Named Notation)
SQL> BEGIN
2 DBMS_OUTPUT.put_line (add_three_numbers (c=>3, a=>4, b=>5));
3 END;
4 /
12
PL/SQL 过程已成功完成。
SQL> BEGIN
2 DBMS_OUTPUT.put_line (add_three_numbers (3, a=>4, b=>5));
3 END;
4 /
DBMS_OUTPUT.put_line (add_three_numbers (3, a=>4, b=>5));
*
第 2 行出现错误:
ORA-06550: 第 2 行, 第 26 列:
PLS-00703: 列表中具有指定参数的多个实例
ORA-06550: 第 2 行, 第 4 列:
PL/SQL: Statement ignored
--混合表示法(Mixed Notation)
SQL> ed
已写入 file afiedt.buf
1 BEGIN
2 DBMS_OUTPUT.put_line (add_three_numbers (3, c=>4, b=>5));
3* END;
SQL> /
12
PL/SQL 过程已成功完成。
SQL> BEGIN
2 DBMS_OUTPUT.put_line (add_three_numbers (3, a=>4));
3 END;
4 /
DBMS_OUTPUT.put_line (add_three_numbers (3, a=>4));
*
第 2 行出现错误:
ORA-06550: 第 2 行, 第 26 列:
PLS-00703: 列表中具有指定参数的多个实例
ORA-06550: 第 2 行, 第 4 列:
PL/SQL: Statement ignored
--排除表示法(Exclusionary Notation)
SQL> ed
已写入 file afiedt.buf
1 BEGIN
2 DBMS_OUTPUT.put_line (add_three_numbers (3, c=>4));
3* END;
SQL> /
7
PL/SQL 过程已成功完成。
2. SQL调用函数表示法
SQL> SELECT add_three_numbers (2018, 2050, 2080) from dual;
ADD_THREE_NUMBERS(2018,2050,2080)
---------------------------------
6148
SQL> SELECT add_three_numbers (c=>2018, a=>2050, b=>2080) from dual;
ADD_THREE_NUMBERS(C=>2018,A=>2050,B=>2080)
------------------------------------------
6148