SET SERVEROUTPUT ON
DECLARE
/*用于以INSERT语句方式从ORACLE数据库导出指定表格的数据*/
LV_TABNAME VARCHAR2(2000) := 'MY_TAB';/*目标表格*/
CONDITION VARCHAR2(2000) := ' 1=1 AND ROWNUM<6 ';/*导出条件*/
LV_SQL VARCHAR2(32767) := '';
TAR_SQL VARCHAR2(32767) := '';
COLS_NAMES VARCHAR2(32767) := '';
TYPE C_TYPE IS REF CURSOR;
C1 C_TYPE;
BEGIN
FOR LV_REC IN (SELECT * FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = LV_TABNAME
ORDER BY COLUMN_ID
)
LOOP
COLS_NAMES := COLS_NAMES||','||LV_REC.COLUMN_NAME;
END LOOP;
COLS_NAMES := SUBSTR(COLS_NAMES,2);
DBMS_OUTPUT.ENABLE (BUFFER_SIZE=>NULL) ;
FOR LV_REC IN (SELECT * FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = LV_TABNAME
ORDER BY COLUMN_ID
)
LOOP
IF LV_REC.DATA_TYPE = 'VARCHAR2'
THEN
LV_SQL := LV_SQL||'||'',''||'||'DECODE('||LV_REC.COLUMN_NAME||',NULL,''NULL'',''''''''||' ||LV_REC.COLUMN_NAME||'||'''''''')';
ELSIF LV_REC.DATA_TYPE = 'DATE'
THEN
LV_SQL := LV_SQL||'||'',''||'||'DECODE('||LV_REC.COLUMN_NAME|| ',NULL,''NULL'',''TO_DATE(''''''||TO_CHAR(' ||LV_REC.COLUMN_NAME|| ',''YYYY-MM-DD HH:MI:SS'')||'''''', ''''YYYY-MM-DD HH:MI:SS'''')'')';
ELSE
LV_SQL := LV_SQL||'||'',''||'||'DECODE('||LV_REC.COLUMN_NAME||',NULL,''NULL'','||LV_REC.COLUMN_NAME||')';
END IF;
END LOOP;
LV_SQL := SUBSTR(LV_SQL,8);
OPEN C1 FOR 'SELECT '|| LV_SQL ||' FROM ' || LV_TABNAME || ' WHERE ' || CONDITION;
LOOP
FETCH C1 INTO TAR_SQL;
DBMS_OUTPUT.PUT_LINE('INSERT INTO ' || LV_TABNAME || '('|| COLS_NAMES ||') VALUES ('|| TAR_SQL ||');');
EXIT WHEN C1%NOTFOUND;
END LOOP;
DBMS_OUTPUT.PUT_LINE('INSERT INTO ' || LV_TABNAME || '('|| COLS_NAMES ||') VALUES ('|| TAR_SQL ||');');
END;
DECLARE
/*用于以INSERT语句方式从ORACLE数据库导出指定表格的数据*/
LV_TABNAME VARCHAR2(2000) := 'MY_TAB';/*目标表格*/
CONDITION VARCHAR2(2000) := ' 1=1 AND ROWNUM<6 ';/*导出条件*/
LV_SQL VARCHAR2(32767) := '';
TAR_SQL VARCHAR2(32767) := '';
COLS_NAMES VARCHAR2(32767) := '';
TYPE C_TYPE IS REF CURSOR;
C1 C_TYPE;
BEGIN
FOR LV_REC IN (SELECT * FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = LV_TABNAME
ORDER BY COLUMN_ID
)
LOOP
COLS_NAMES := COLS_NAMES||','||LV_REC.COLUMN_NAME;
END LOOP;
COLS_NAMES := SUBSTR(COLS_NAMES,2);
DBMS_OUTPUT.ENABLE (BUFFER_SIZE=>NULL) ;
FOR LV_REC IN (SELECT * FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = LV_TABNAME
ORDER BY COLUMN_ID
)
LOOP
IF LV_REC.DATA_TYPE = 'VARCHAR2'
THEN
LV_SQL := LV_SQL||'||'',''||'||'DECODE('||LV_REC.COLUMN_NAME||',NULL,''NULL'',''''''''||' ||LV_REC.COLUMN_NAME||'||'''''''')';
ELSIF LV_REC.DATA_TYPE = 'DATE'
THEN
LV_SQL := LV_SQL||'||'',''||'||'DECODE('||LV_REC.COLUMN_NAME|| ',NULL,''NULL'',''TO_DATE(''''''||TO_CHAR(' ||LV_REC.COLUMN_NAME|| ',''YYYY-MM-DD HH:MI:SS'')||'''''', ''''YYYY-MM-DD HH:MI:SS'''')'')';
ELSE
LV_SQL := LV_SQL||'||'',''||'||'DECODE('||LV_REC.COLUMN_NAME||',NULL,''NULL'','||LV_REC.COLUMN_NAME||')';
END IF;
END LOOP;
LV_SQL := SUBSTR(LV_SQL,8);
OPEN C1 FOR 'SELECT '|| LV_SQL ||' FROM ' || LV_TABNAME || ' WHERE ' || CONDITION;
LOOP
FETCH C1 INTO TAR_SQL;
DBMS_OUTPUT.PUT_LINE('INSERT INTO ' || LV_TABNAME || '('|| COLS_NAMES ||') VALUES ('|| TAR_SQL ||');');
EXIT WHEN C1%NOTFOUND;
END LOOP;
DBMS_OUTPUT.PUT_LINE('INSERT INTO ' || LV_TABNAME || '('|| COLS_NAMES ||') VALUES ('|| TAR_SQL ||');');
END;