使用 PL/sql 函数进行 SQL 更新

Posted

技术标签:

【中文标题】使用 PL/sql 函数进行 SQL 更新【英文标题】:SQL update with PL/sql function 【发布时间】:2015-03-28 19:17:52 【问题描述】:

我必须更新表中的一列(使用函数的要求)。我为 customer1 表创建了简单的函数。那么我如何使用函数更新我的表。有什么办法吗?

CREATE OR REPLACE FUNCTION fn_easy (name_in in customer1.last_name%type)          
   RETURN customer1.first_name%type IS
   name_tab customer1.first_name%type;
        BEGIN
  select first_name  into name_tab  from  customer1
  where last_name  = name_in;
     RETURN name_tab;
  END fn_easy;

 update customer1
 set first_name  = fn_easy(customer1.last_name);

我知道我们需要在函数中循环参数。我唯一的想法是通过光标来完成。但是当我有 200 条记录时,我认为使用游标来完成这项任务并不是最佳选择。

【问题讨论】:

您在哪里使用该功能?从 SELECT 调用时,不能在函数中使用 DML/DDL 操作。同样,当从 UPDATE/DELETE 调用时,该函数不能在同一个表上 SELECT 或执行 DML。似乎 PROCEDURE 更适合您正在做的事情。 您的示例没有任何意义:表格在练习结束时与开始时相同。所以很难理解你在做什么。如果您希望我们提供帮助,您需要提供一个有意义的问题。 您的函数也会在您第一次使用时出错,例如“Smith”,并且表格中有一个“Joe Smith”和一个“Jane Smith”。无论如何,在什么情况下你会有姓而没有名字? 【参考方案1】:

你的函数一般没问题,但是你要保证里面的select正好返回1个值,否则你会得到一个异常。如果要将所有值选择到一个数组中,请使用BULK COLLECT INTO。要使用函数更新列值,列值类型必须与函数返回类型兼容。

【讨论】:

以上是关于使用 PL/sql 函数进行 SQL 更新的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Dbms_output.put_line(''); 中使用 <br> 标签在 PL/SQL 甲骨文中?

oracle PL/SQL里面, tnsnames.ora文件里面配置了之后, 在下拉列表框里面没有显示

pl / sql如何使用带有游标的for循环进行更新操作

我可以在 PL/SQL 函数中执行更新吗?

oracle sql DEVELOPER ORA-12535: TNS: 操作超时

过程中的 Pl/Sql Oracle 函数