我有一个Oracle数据库表,其中包含field_name_1,field_name_2,...,field_name_200列。我想为每行数据选择并更新循环中的每一列,请提供帮助。
DECLARE
l_udf_vals tablea%ROWTYPE;
field_val_temp varchar2(150);
field_val field_val_temp%TYPE;
BEGIN
FOR yu IN (SELECT a.* FROM tablea a, tableb b, tablec c
WHERE a.function_id=b.function_id AND b.col = c.col AND )
LOOP
FOR i IN 1..200
LOOP
field_val_temp := 'field_val_'||i;
SELECT field_val_temp INTO field_val FROM tableb
WHERE function_id='STDCUSAC' AND rec_key = yu.rec_key;
IF field_val IS NOT NULL THEN
UPDATE tablec SET 'field_val_'||i = field_val;
END LOOP;
COMMIT;
END LOOP;
COMMIT;
END;
EXECUTE IMMEDIATE 'SELECT '||field_val_temp ||' FROM tableb
WHERE function_id = :func_val AND rec_key = :rec_key' INTO field_val
USING 'STDCUSAC' , yu.rec_key;
和,
EXECUTE IMMEDIATE 'UPDATE tablec SET field_val_'||i||' = :field_val'
USING field_val;
您必须使用动态SQL。但是正如@duffymo所说,重新考虑对表进行规范化。另外,如果您更新同一张表,请在循环后将其构造为一个查询字符串,以用于多列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句