在SQL语句中使用函数的限制及过程与函数的区别

²必须是存储函数,存储过程不能在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;

错误!




过程与函数的区别


你可能感兴趣的:(oracle)