我想创建一个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和下面的映射把输出保存在服务器上。
当我在SP中把输出改为varchar2(4000),在映射中把输出改为string(4000)时,已经创建了文件。
请你建议我应该如何解决数据类型不匹配的问题,是否可以将这么长的变量保存到文件中?
是的,你可以把最大长度的字符串保存到一个文件中。看你的设计,似乎在数据类型上没有任何冲突。你可以使用字符串到字符串的映射