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