我有一个源数据库,我应该根据我的源数据库在另一个数据库中插入或更新一些行。我的问题是在更新或插入原始数据类型时,只有一半的行值来自目标数据库。
我的原始代码部分是:
v_raw RAW(16);
FOR i IN 1 .. v_col_cnt
LOOP
CASE v_desc_tab ( i ).col_type
WHEN 1
THEN
DBMS_SQL.define_column ( v_cursor_id, i, v_namevar, v_desc_tab ( i ).col_max_len );
WHEN 2
THEN
DBMS_SQL.define_column ( v_cursor_id, i, v_numvar );
WHEN 12
THEN
DBMS_SQL.define_column ( v_cursor_id, i, v_datevar );
WHEN 96
THEN
DBMS_SQL.define_column ( v_cursor_id, i, v_charvar, v_desc_tab ( i ).col_max_len );
WHEN 112
THEN
DBMS_SQL.define_column ( v_cursor_id, i, v_clob );
WHEN 23
THEN
DBMS_SQL.define_column ( v_cursor_id, i, v_raw, v_desc_tab ( i ).col_max_len );
ELSE
DBMS_OUTPUT.PUT_LINE('another type');
END CASE;
END LOOP;
WHILE DBMS_SQL.fetch_rows ( v_cursor_id ) > 0
LOOP
v_insert_str := 'INSERT INTO ' || v_table_name || ' VALUES(' ;
v_update_str := 'UPDATE ' || v_table_name || ' SET ';
v_update_where_str := ' WHERE ';
FOR i IN 1 .. v_col_cnt
LOOP
CASE v_desc_tab ( i ).col_type
WHEN 23
THEN
DBMS_SQL.COLUMN_VALUE ( v_cursor_id, i, v_raw );
v_insert_str := v_insert_str || '''' || v_raw || '''' || ', ';
IF is_index(v_table_name, v_desc_tab ( i ).col_name) != 1
THEN
v_update_str := v_update_str || v_desc_tab ( i ).col_name || ' = ''' || v_raw || '''' || ', ';
ELSE
v_update_where_str := v_update_where_str || v_desc_tab ( i ).col_name || ' = ''' || v_raw || '''' || ' and ';
END IF;
END CASE;
END LOOP;
在创建插入或更新命令后,它将被更新或插入。
例如,我的源数据库中的值是:0022F12C24984AECA5E529C533B067B3
但在目标中它就像:0022F12C24984AEC
我尝试了 RAW(32) 和 RAW(64) 但它没有用。