Я хочу создать файл JSON таблицы oracle. Для этого я создал 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 (поскольку это длинная строка), и, поскольку я не могу сохранить его на сервере БД, я необходимо сохранить его на сервере Informatica, поэтому я хотел бы использовать WFL со следующим сопоставлением, чтобы сохранить вывод в файл на сервере.
![mapping](https://i.stack.imgur.com/o5MMf.png)
WFL выполняется успешно, файл создается, но ничего не записывается. Когда я изменил вывод на varchar2 (4000) в SP и строку (4000) в сопоставлениях, он создал файл.
Не могли бы вы подсказать, как мне разрешить несоответствие типов данных и можно ли сохранить такую длинную переменную в файл?