将Oracle存储过程的clob参数(创建JSON格式)保存到Informatica的文件中。

问题描述 投票:0回答:1

我想创建一个oracle表的JSON文件。为此,我创建了一个Oracle SP。

 PROCEDURE P_JSON_GEN( SCHEMA_NAME_IN IN VARCHAR2 DEFAULT 'CDM_MART', TABLE_NAME_IN IN VARCHAR2 DEFAULT NULL, P_JSON OUT CLOB) IS  

  v_schema_name varchar2(20);
  v_table_name varchar2(30);
  v_sql varchar2(32767);
  type t_json is TABLE of varchar2(1000) INDEX BY BINARY_INTEGER;
  table_json t_json; 
  v_json clob;
  CURSOR c_col_lst IS SELECT column_name FROM all_tab_cols WHERE OWNER = 'CDM_MART' AND table_name = (SELECT table_name FROM all_synonyms WHERE synonym_name = table_name_in AND OWNER= schema_name_in);

  BEGIN 

v_schema_name := schema_name_in; 
v_table_name := TABLE_NAME_IN;
v_sql := 'SELECT json_object(''';
v_json := '';

for n in c_col_lst
             loop
                v_sql := v_sql ||n.column_name||''' VALUE '||n.column_name||',''';
             end loop;
             v_sql := RTRIM(v_sql, ',''') || ' FORMAT JSON) as json FROM '||TABLE_NAME_IN;

             execute immediate v_sql BULK COLLECT into table_json;
             DBMS_OUTPUT.PUT_LINE (v_sql);
             for i in 1 .. table_json.count
             loop 
             v_json := v_json || table_json(i) || chr(10);
             end loop;

        P_JSON := v_sql;
        RETURN; 
    end;

所以它给我创建了一个输出CLOB(因为它是一个长字符串),由于我不能把它保存在DB服务器上,我需要把它保存在Informatica服务器上,所以我想使用WFL和下面的映射把输出保存在服务器上。

mapping

当我在SP中把输出改为varchar2(4000),在映射中把输出改为string(4000)时,已经创建了文件。

请你建议我应该如何解决数据类型不匹配的问题,是否可以将这么长的变量保存到文件中?

oracle output procedure informatica clob
1个回答
0
投票

是的,你可以把最大长度的字符串保存到一个文件中。看你的设计,似乎在数据类型上没有任何冲突。你可以使用字符串到字符串的映射

© www.soinside.com 2019 - 2024. All rights reserved.