pl / sql函数调用了多少次?

前端之家收集整理的这篇文章主要介绍了pl / sql函数调用了多少次?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设您有以下更新:
Update table set col1 = func(col2)
where col1<>func(col2)

func函数每行评估两次,或每行评估一次?

谢谢,

解决方法

这种情况下某些实验很有用(这是在10g上进行的).使用以下查询,我们可以告诉每次调用它们时,将使用相同的参数(在本例中为none)执行正常的函数
select dbms_random.value() from all_tables

这是因为Oracle假定函数不会一致地返回相同的值,除非您另有说明.我们可以通过使用deterministic关键字创建函数来实现:

CREATE FUNCTION rand_det
   RETURN NUMBER
   DETERMINISTIC AS
BEGIN
   RETURN DBMS_RANDOM.VALUE ();
END;

在第一个查询中使用此函数而不是dbms_random告诉我们,尽管有很多调用,但查询只执行一次.但这只是澄清了选择部分.如果我们在select和where子句中使用相同的确定性函数,该怎么办?我们可以使用以下查询来测试:

SELECT rand_det
FROM   all_tables
WHERE  rand_det > .5;

您可能需要多次运行才能看到我们的证明,但最终,您会看到一个小于0.5的值列表.这为我们提供了证据,即使确定性函数正在被执行两次:它出现的每个部分一次.作为替代,您可以如下修改我们的确定性函数,然后运行后续查询,这将显示写入DBMS_OUTPUT的2行.

CREATE OR REPLACE FUNCTION rand_det
   RETURN NUMBER
   DETERMINISTIC AS
BEGIN
   DBMS_OUTPUT.put_line ('Called!');
   RETURN DBMS_RANDOM.VALUE ();
END;

SELECT rand_det
FROM   all_tables;

猜你在找的MsSQL相关文章