0

我有一个源数据库,我应该根据我的源数据库在另一个数据库中插入或更新一些行。我的问题是在更新或插入原始数据类型时,只有一半的行值来自目标数据库。

我的原始代码部分是:

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) 但它没有用。

4

0 回答 0