在 SQL 中是否可以有常量函数参数?
Is it possible to have constant function parameters in SQL?
是否可以在 SQL 中使用常量函数参数以确保以后不更改值?
这样的东西不起作用:
function my_func(
first_param constant varchar2
, second_param constant varchar2
) return varchar2
is
... -- Rest
没有必要,因为您无法重新定义 IN
参数。例如:
CREATE FUNCTION does_not_work(
a IN NUMBER,
b IN NUMBER
) RETURN NUMBER
IS
BEGIN
IF a < 2 THEN
a := 2;
END IF;
RETURN GREATEST( a, b );
END;
/
(注意:IN
关键字是可选的,默认的参数方向;如果你在声明签名时不带IN
关键字,你会得到同样的错误。)
给出:
ORA-24344: success with compilation error
如果您查看错误:
SELECT * FROM USER_ERRORS;
输出:
NAME
TYPE
SEQUENCE
LINE
POSITION
TEXT
ATTRIBUTE
MESSAGE_NUMBER
DOES_NOT_WORK
FUNCTION
1
8
5
PLS-00363: expression 'A' cannot be used as an assignment target
ERROR
363
DOES_NOT_WORK
FUNCTION
2
8
5
PL/SQL: Statement ignored
ERROR
0
这告诉您不能使用 IN
参数作为赋值目标。
是否可以在 SQL 中使用常量函数参数以确保以后不更改值?
这样的东西不起作用:
function my_func(
first_param constant varchar2
, second_param constant varchar2
) return varchar2
is
... -- Rest
没有必要,因为您无法重新定义 IN
参数。例如:
CREATE FUNCTION does_not_work(
a IN NUMBER,
b IN NUMBER
) RETURN NUMBER
IS
BEGIN
IF a < 2 THEN
a := 2;
END IF;
RETURN GREATEST( a, b );
END;
/
(注意:IN
关键字是可选的,默认的参数方向;如果你在声明签名时不带IN
关键字,你会得到同样的错误。)
给出:
ORA-24344: success with compilation error
如果您查看错误:
SELECT * FROM USER_ERRORS;
输出:
NAME TYPE SEQUENCE LINE POSITION TEXT ATTRIBUTE MESSAGE_NUMBER DOES_NOT_WORK FUNCTION 1 8 5 PLS-00363: expression 'A' cannot be used as an assignment target ERROR 363 DOES_NOT_WORK FUNCTION 2 8 5 PL/SQL: Statement ignored ERROR 0
这告诉您不能使用 IN
参数作为赋值目标。