将ROWTYPE序列化为VARCHAR(即字符串)

时间:2013-10-14 23:57:42

标签: oracle serialization plsql

所以我需要能够获取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,更不用说名字了。有什么想法我可以用不同的想法去做吗?理想情况下,每当我向表中添加一列时,我都不想更改此序列化方法(即,应该是“通用”)。

1 个答案:

答案 0 :(得分:0)

在USER_TAB_COLUMNS上循环查询,然后尝试

execute immediate 'begin :1 := aMyTabRec.'||myTabCur.column_name||'; end;'
  using out theMagicString;