²必须是存储函数,存储过程不能在SQL语句中调用。
²参数的类型只能是IN。
²参数和返回值的数据类型都必须是SQL支持的数据类型,而不能是PL/SQL中特定的数据类型,如BOOLEAN、RECORD、TABLE。
²不能用于CREATE或者ALTER TABLE命令中的CHECK约束或者字段的缺省值定义。
²必须有执行函数的权限。
²在SQL语句(SELECT、UPDATE、DELETE)中调用的函数不能包含DML语句。
²在DML语句(UPDATE、DELETE)中调用的函数不能查询在DML中使用的表。
²在SQL语句中调用的函数不能含有终结事务(transaction)的语句,如COMMIT。
函数中不能调用违反上述限制的子程序。
CREATE OR REPLACE FUNCTION dml_call_sql (p_sal NUMBER)
RETURN NUMBER
IS
BEGIN
INSERT INTO emp (empno, ename, hiredate, job_id, salary)
VALUES(1, 'employee 1', SYSDATE, 'SALESMAN', 1000);
RETURN (p_sal + 100);
END;
/
UPDATE emp SET sal = dml_call_sql(2000)
WHERE empno =170;
错误!
过程与函数的区别