pl / sql函数调用了多少次?
发布时间:2021-03-05 14:08:11 所属栏目:MsSql教程 来源:网络整理
导读:假设您有以下更新: Update table set col1 = func(col2)where col1func(col2) func函数每行评估两次,或每行评估一次? 谢谢, 解决方法 这种情况下某些实验很有用(这是在10g上进行的).使用以下查询,我们可以告诉每次调用它们时,将使用相同的参数(在本例中为no
假设您有以下更新: 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; (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读