2
有人可以澄清下面的PL/SQL代碼在做什麼?它看起來好像assets_type是base_Asset的表。這是否使它成爲一張桌子?這是PL/SQL表中的表(如果不是這樣的代碼是怎麼回事?)
我有困難的時候,這個可視化時,彗星填充數據:
assets(v_ref_key)(dbfields(i).field) := rtrim(replace(strbuf_long2,'''',''''''));
這是類似於二維數組?這是否意味着填充索引爲v_ref_key的資產(臨時)表中的字段列?
PROCEDURE LOAD
IS
TYPE dbfields_rec IS RECORD (field dbfields.field%TYPE,
article_title dbfields.title%TYPE,
image_title dbfields.title%TYPE);
TYPE dbfields_type IS TABLE OF dbfields_rec INDEX BY BINARY_INTEGER;
TYPE base_Asset IS TABLE OF VARCHAR2(4000) INDEX BY VARCHAR2(32);
TYPE assets_type IS TABLE OF asset_type INDEX BY VARCHAR2(4000);
dbfields dbfields_type;
assets assets_type;
v_ref_key assets.ref_key%TYPE;
-- CLIPPED Populate dbfields array code
-- It correctly populates
FOR i IN 1..dbfields.COUNT LOOP
BEGIN
sqlbuf := '(select rtrim(ufld3), ' || dbfields(i).field ||
' as col_label from assetstable ' ||
' where rtrim(ufld3) = ' || '''' || in_id || '''' || ')';
OPEN assets_cur FOR
sqlbuf;
LOOP
FETCH assets_cur INTO v_ref_key, strbuf_long2;
EXIT WHEN assets_cur%NOTFOUND;
IF (trim(strbuf_long2) is not null and dbfields(i).field is not null) THEN
assets(v_ref_key) (dbfields(i).field)
:= rtrim(replace(strbuf_long2,'''',''''''));
END IF;
END LOOP;
close assets_cur;
END;
END LOOP;
END LOAD;
甜蜜的憐憫...... – 2013-03-19 18:24:00
「asset_type」在哪裏定義?我沒有在聲明中看到它。 – OldProgrammer 2013-03-19 21:02:22
這看起來很像處理EAV風格的數據庫模式所需的那種代碼。 「dbfields」等 – 2013-03-20 03:13:53