2

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

4

1 回答 1

0

loop over the query on USER_TAB_COLUMNS and then try

execute immediate 'begin :1 := aMyTabRec.'||myTabCur.column_name||'; end;'
  using out theMagicString;
于 2013-10-15T06:31:05.287 回答