1
假设我有列 A,B,C,d表,电子更新多个列与函数调用
有一种方法/语法来更新列d和e从过程的OUT参数/函数,它在列a,b和c的参数值中。 (程序(a,b,c,out d,out e))
(不同于使用游标逐个遍历所有行)?
假设我有列 A,B,C,d表,电子更新多个列与函数调用
有一种方法/语法来更新列d和e从过程的OUT参数/函数,它在列a,b和c的参数值中。 (程序(a,b,c,out d,out e))
(不同于使用游标逐个遍历所有行)?
与Oracle专家我到下面的解决方案的帮助:
CREATE TABLE testtable
(
a number,
b number,
c number,
d number
);
CREATE TYPE testobj AS OBJECT
(
x number,
y number
);
CREATE OR REPLACE FUNCTION testfun(a number, b number)
RETURN testobj IS
begin
return new testobj(x=>a+b, y=> a*b);
end;
INSERT INTO testtable VALUES (1,2,null,null);
INSERT INTO testtable VALUES (5,6,null,null);
UPDATE
(SELECT tt.*,
testfun1(a,b) fun_ret FROM testtable tt) talias
SET talias.c=talias.fun_ret.x,
talias.d=talias.fun_ret.y
;
您可以创建一个PL/SQL tables or user defined records,像这样
函数来处理记录
FUNCTION Get_updated_recs(p_emp_id emp.emp_id%TYPE,
p_manager_id emp.manager_id%TYPE)
RETURN EMP_REC_TYPE
IS
p_emp_rec EMP_REC_TYPE;
BEGIN
IF p_emp_id = 100 THEN
p_emp_rec.salary := 50000;
p_emp_rec.bonus := 10000;
END IF;
RETURN p_emp_rec;
END get_updated_recs;
主程序单元
DECLARE
TYPE emp_rec_type IS RECORD (
salary employees.salary%TYPE,
bonus employees.bonus);
emp_rec EMP_REC_TYPE;
BEGIN
FOR emp IN (SELECT *
FROM employees) LOOP
emp_rec := Get_updated_recs(emp.emp_id, emp.manager_id);
UPDATE employees
SET salary = emp_rec.salary,
bonus = emp_rec.bonus
WHERE emp_id = emp.emp_id;
END LOOP;
END;
我没有测试/编译它,只是写出我的内存ORY但这样的事情应该工作
为什么不使用功能,而不是一个程序? – 2013-04-05 18:13:14
同样的问题,函数只返回一个值,我需要根据同一行中的其他列更新行中的几个列。 – 2013-04-06 11:07:31