【发布时间】: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