使用 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文件里面配置了之后, 在下拉列表框里面没有显示