Home > Oracle PL-SQL > Backup Table to Flatfile

Backup Table to Flatfile

CREATE OR REPLACE PROCEDURE BUAT_FILETXT(NAMA_FILE IN VARCHAR2,STR IN VARCHAR2,ERRMSG OUT VARCHAR2) AS
BEGIN
   ERRMSG := STR_APPEND(NAMA_FILE,STR);
END;
/

 

CREATE OR REPLACE PROCEDURE genins(p_table IN varchar
                                  ,p_default_col1 VARCHAR default null
                                  ,p_default_col1_value VARCHAR default null
                                  ,p_default_col2 VARCHAR default null
                                  ,p_default_col2_value VARCHAR default null)
IS
  –
  l_column_list   VARCHAR(2000);
  l_value_list    VARCHAR(2000);
  l_query         VARCHAR(2000);
  l_result    VARCHAR2(900);
  l_namaFile   VARCHAR2(199) :=’c:/Backup/bkp_’||to_char(sysdate,’yyyymmdd’)||’_'||TO_CHAR(SYSDATE,’HH24MISS’)||’.txt’;
  l_cursor        INTEGER;
  ignore NUMBER;
  –
  FUNCTION get_cols(p_table VARCHAR)
  RETURN VARCHAR
  IS
    l_cols VARCHAR(2000);
    CURSOR l_col_cur(c_table VARCHAR) IS
            SELECT column_name
            FROM   user_tab_columns
            WHERE  table_name = upper(c_table)
            ORDER BY column_id;
  BEGIN
    l_cols := null;
    FOR rec IN l_col_cur(p_table)
    LOOP
      l_cols := l_cols || rec.column_name || ‘,’;
    END LOOP;
    RETURN substr(l_cols,1,length(l_cols)-1);
  END;
  –
  FUNCTION get_query(p_table IN VARCHAR
                    ,p_default_col1 VARCHAR
                    ,p_default_col1_value VARCHAR
                    ,p_default_col2 VARCHAR
                    ,p_default_col2_value VARCHAR)
  RETURN VARCHAR
  IS
    l_query VARCHAR(2000);
      CURSOR l_query_cur(c_table VARCHAR
                        ,c_default_col1 VARCHAR
                        ,c_default_col1_value VARCHAR
                        ,c_default_col2 VARCHAR
                        ,c_default_col2_value VARCHAR) IS
        SELECT decode(column_name,c_default_col1,””||replace(c_default_col1_value,””,”””)||””,
               decode(column_name,c_default_col2,””||replace(c_default_col2_value,””,”””)||””,
              ‘decode(‘||column_name||’,null,”null”,’||
               decode(data_type
               ,’VARCHAR2′,””””’||’||column_name ||’||””””’
               ,’DATE’    ,”’to_date(”””||to_char(‘||column_name||’,”YYYY-MM-DD HH24:MI:SS”)||”””,””YYYY-MM-DD HH24:MI:SS””)”’
               ,column_name
               ) || ‘)’ )) column_query
          FROM user_tab_columns
         WHERE table_name = upper(c_table)
        ORDER BY column_id;
  BEGIN
    l_query := ‘SELECT ‘;
    FOR rec IN l_query_cur(p_table, p_default_col1, p_default_col1_value, p_default_col2, p_default_col2_value)
    LOOP
      l_query := l_query || rec.column_query || ‘||”,”||’;
    END LOOP;
    l_query := substr(l_query,1,length(l_query)-7);
    RETURN l_query || ‘ FROM ‘ || p_table;
  END;
  –
BEGIN
  l_column_list  := get_cols(p_table);
  l_query        := get_query(p_table,upper(p_default_col1),p_default_col1_value
                                     ,upper(p_default_col2),p_default_col2_value);
  l_cursor := dbms_sql.open_cursor;
  DBMS_SQL.PARSE(l_cursor, l_query, DBMS_SQL.native);
  DBMS_SQL.DEFINE_COLUMN(l_cursor, 1, l_value_list, 2000);
  ignore := DBMS_SQL.EXECUTE(l_cursor);
  LOOP
    IF DBMS_SQL.FETCH_ROWS(l_cursor)>0 THEN
      DBMS_SQL.COLUMN_VALUE(l_cursor, 1, l_value_list);
      BUAT_FILETXT(l_namaFile,’INSERT INTO ‘||p_table||’ (‘||l_column_list||’)',l_result);
      BUAT_FILETXT(l_namaFile,’  VALUES (‘||l_value_list||’);’,l_result);
    ELSE
      EXIT;
    END IF;
  END LOOP;
END;
/

Categories: Oracle PL-SQL
  1. No comments yet.
  1. No trackbacks yet.