所以我需要能够获取ROWTYPE参数并将其序列化为字符串。我知道有一个DBMS包可以序列化为XML,但我想简单地将它(如果可能的话)序列化为名称/值对(例如,colname1 = colval1,colname2 = colval2,...)。
所以我创建了一个非常简单的函数,我基本上会传入一行,这个方法可以解析并序列化它。
CREATE OR REPLACE FUNCTION "A1CLIENT01"."SERIALIZE_TP"(AMyTabRec MyTable%ROWTYPE) RETURN VARCHAR2
is
begin
... work some magic here...
return theMagicString;
end;
我认为这很容易(似乎),但我想的是以下内容:
CURSOR MyTabCur IS
SELECT COLUMN_NAME INTO lCurrColumn
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'MyTable';
FOR a_mytab_rec IN MyTabCur
LOOP
theMagicString := theMagicString || lCurrColumn || '=' || AMyTabRec(lCurrColumn) || ',';
END LOOP;
但是这当然不起作用,因为我无法用数字索引来反驳ROWTYPE,更不用说名字了。有什么想法我可以用不同的想法去做吗?理想情况下,每当我向表中添加一列时,我都不想更改此序列化方法(即,应该是“通用”)。
答案 0 :(得分:0)
在USER_TAB_COLUMNS上循环查询,然后尝试
execute immediate 'begin :1 := aMyTabRec.'||myTabCur.column_name||'; end;'
using out theMagicString;