【问题标题】:Save Oracle stored procedure out clob parameter (to create JSON format) to a file with Informatica使用 Informatica 将 Oracle 存储过程输出 clob 参数(以创建 JSON 格式)保存到文件中
【发布时间】:2020-09-15 23:49:59
【问题描述】:

我想创建一个 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将输出保存到服务器上的文件中。

WFL 成功执行,文件已创建,但没有写入任何内容。 当我将输出更改为 SP 中的 varchar2(4000) 和映射中的 string(4000) 时,它创建了文件。

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

【问题讨论】:

  • 您可以将SP中的数据类型转换为文本(100000或一些较大的数字)。然后在目标文本文件中,您可以为该列提及相同的长度。

标签: oracle output procedure informatica clob


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多