_create_compat.sql 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. create or replace function now(v1 in number := 0) return date is
  2. Result date;
  3. begin
  4. SELECT sysdate INTO Result FROM dual;
  5. return Result;
  6. end now;
  7. /
  8. create or replace function rand(v1 in number := 0) return number is
  9. Result number;
  10. begin
  11. SELECT dbms_random.value INTO Result FROM dual;
  12. return Result;
  13. end rand;
  14. /
  15. create or replace function concat(v1 in varchar2, v2 in varchar2, v3 in varchar2) return varchar2 IS
  16. Result varchar2(4000);
  17. begin
  18. SELECT v1||v2||v3 INTO Result from dual;
  19. return Result;
  20. end concat;
  21. /
  22. create or replace TYPE TABLE_STRING IS TABLE OF VARCHAR2(4000);
  23. /
  24. create or replace function DUMP_TABLES(P_OWNER in VARCHAR2) RETURN TABLE_STRING
  25. PIPELINED
  26. IS
  27. CURSOR COLUMNS_CUR (P_OWNER in VARCHAR2, P_TABLE in VARCHAR2) IS
  28. SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
  29. FROM ALL_TAB_COLUMNS
  30. WHERE OWNER = UPPER(P_OWNER) AND TABLE_NAME = UPPER(P_TABLE)
  31. ORDER BY COLUMN_ID;
  32. COLUMN_REC COLUMNS_CUR%ROWTYPE;
  33. TABLE_REC_CUR SYS_REFCURSOR;
  34. L_QUERY VARCHAR2(8000);
  35. L_QUERY1 VARCHAR2(8000);
  36. L_QUERY2 VARCHAR2(8000);
  37. L_LINE VARCHAR2(8000);
  38. L_COMA CHAR(2) := ' ';
  39. FIRST_ROW BOOLEAN := TRUE;
  40. BEGIN
  41. FOR cur IN (SELECT TABLE_NAME FROM all_tables WHERE owner=UPPER(P_OWNER)) LOOP
  42. L_QUERY1 := 'SELECT ''INSERT INTO ' || cur.table_name;
  43. L_QUERY2 :='(';
  44. OPEN COLUMNS_CUR(P_OWNER, cur.table_name);
  45. FIRST_ROW := TRUE;
  46. LOOP
  47. FETCH COLUMNS_CUR INTO COLUMN_REC;
  48. IF FIRST_ROW AND COLUMNS_CUR%NOTFOUND THEN
  49. PIPE ROW('Table ''' || P_OWNER || '.' || cur.table_name || ''' not found');
  50. END IF;
  51. EXIT WHEN COLUMNS_CUR%NOTFOUND;
  52. IF FIRST_ROW THEN
  53. L_QUERY2 := L_QUERY2 || COLUMN_REC.COLUMN_NAME;
  54. L_QUERY := ' VALUES ('' || ';
  55. ELSE
  56. L_QUERY2 := L_QUERY2||','||COLUMN_REC.COLUMN_NAME;
  57. L_COMA := ', ';
  58. L_QUERY := L_QUERY || ' || '', '' || ';
  59. END IF;
  60. IF COLUMN_REC.DATA_TYPE = 'VARCHAR2' OR COLUMN_REC.DATA_TYPE = 'CHAR'
  61. OR COLUMN_REC.DATA_TYPE = 'CLOB' THEN
  62. L_QUERY := L_QUERY || 'NVL2(' || COLUMN_REC.COLUMN_NAME || ', '''''''' ||
  63. REPLACE(' || COLUMN_REC.COLUMN_NAME || ', '''''''', '''''''''''') || '''''''', ''NULL'')';
  64. ELSIF COLUMN_REC.DATA_TYPE = 'DATE' THEN
  65. L_QUERY := L_QUERY || 'NVL2(' || COLUMN_REC.COLUMN_NAME || ', ''TO_DATE('''''' ||
  66. TO_CHAR(' || COLUMN_REC.COLUMN_NAME || ', ''yyyy-mm-dd hh24:mi:ss'') ||
  67. '''''', ''''yyyy-mm-dd hh24:mi:ss'''')'', ''NULL'')';
  68. ELSIF COLUMN_REC.DATA_TYPE = 'BLOB' THEN
  69. L_QUERY := L_QUERY || 'NVL2(' || COLUMN_REC.COLUMN_NAME ||
  70. ', ''UNSUPPORTED:NON EMPTY BLOB'', ''NULL'')';
  71. ELSE
  72. L_QUERY := L_QUERY || 'NVL(TO_CHAR(' || COLUMN_REC.COLUMN_NAME || '), ''NULL'')';
  73. END IF;
  74. FIRST_ROW := FALSE;
  75. END LOOP;
  76. IF NOT FIRST_ROW THEN
  77. L_QUERY :=L_QUERY1||L_QUERY2||')'|| L_QUERY || ' || '');'' AS LINE FROM ' || COLUMN_REC.TABLE_NAME;
  78. END IF;
  79. CLOSE COLUMNS_CUR;
  80. /* IF FIRST_ROW THEN
  81. RETURN;
  82. END IF;*/
  83. OPEN TABLE_REC_CUR FOR L_QUERY;
  84. LOOP
  85. FETCH TABLE_REC_CUR INTO L_LINE;
  86. EXIT WHEN TABLE_REC_CUR%NOTFOUND;
  87. PIPE ROW(L_LINE);
  88. END LOOP;
  89. CLOSE TABLE_REC_CUR;
  90. END LOOP;
  91. RETURN;
  92. END;
  93. /