Advertisement
Guest User

Untitled

a guest
Jul 29th, 2015
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.21 KB | None | 0 0
  1. PROMPT CREATE OR REPLACE PACKAGE helper_pkg
  2. CREATE OR REPLACE package helper_pkg
  3. as
  4. type varchar2_duplet is record (a varchar2(30), b varchar2(30));
  5. function find_table(p_object varchar2) return varchar2_duplet;
  6. procedure desc_cons(a_owner_table in varchar2, a_with_rep in number default 0);
  7. procedure desc_inds(a_owner_table in varchar2, a_with_rep in number default 0);
  8. end;
  9. /
  10.  
  11. PROMPT CREATE OR REPLACE PACKAGE BODY helper_pkg
  12. CREATE OR REPLACE package body helper_pkg
  13. as
  14.  
  15. function find_table(p_object in varchar2)
  16. return varchar2_duplet
  17. as
  18. l_object varchar2(30);
  19. l_point_pos number(2);
  20. l_exists number(1);
  21. l_owner_name varchar2(30);
  22. l_object_name varchar2(30);
  23. l_object_type varchar2(30);
  24. l_duplet varchar2_duplet;
  25. begin
  26. l_object := Upper(Trim(p_object));
  27. l_point_pos := Instr(l_object, '.');
  28. if l_point_pos = 0 then
  29. select count(*)
  30. into l_exists
  31. from dual
  32. where
  33. exists (
  34. select null
  35. from all_synonyms
  36. where
  37. owner = user
  38. and synonym_name = l_object
  39. )
  40. ;
  41. if l_exists = 1 then
  42. select table_owner
  43. into l_owner_name
  44. from all_synonyms
  45. where
  46. owner = user
  47. and synonym_name = l_object
  48. ;
  49. end if;
  50. l_exists := 0;
  51. select count(*)
  52. into l_exists
  53. from dual
  54. where
  55. exists (
  56. select null
  57. from all_tables
  58. where
  59. owner = user
  60. and table_name = l_object
  61. )
  62. ;
  63. if l_exists = 1 then
  64. select owner
  65. into l_owner_name
  66. from all_tables
  67. where
  68. owner = user
  69. and table_name = l_object
  70. ;
  71. end if;
  72. l_object_name := l_object;
  73. else
  74. l_owner_name := Substr(l_object, 1, l_point_pos - 1);
  75. l_object_name := Substr(l_object, l_point_pos + 1);
  76. end if;
  77. l_duplet.a := l_owner_name;
  78. l_duplet.b := l_object_name;
  79. return l_duplet;
  80. exception
  81. when others then
  82. dbms_output.put_line('ERROR IN HELPER_PKG.FIND_TABLE');
  83. end;
  84.  
  85. procedure desc_cons(a_owner_table in varchar2, a_with_rep in number default 0)
  86. as
  87. type tab_info_row is record(
  88. constraint_name char(30),
  89. constraint_type char(1),
  90. position number(2),
  91. column_name char(30),
  92. reference char(62)
  93. );
  94. type tab_info is table of tab_info_row index by binary_integer;
  95. p_ti tab_info;
  96. p_counter number(8) default 0;
  97. p_constraint_name char(30);
  98. p_owner varchar2(30);
  99. p_table_name varchar2(30);
  100. p_duplet varchar2_duplet;
  101. begin
  102. p_duplet := find_table(a_owner_table);
  103. if p_duplet.a is null then
  104. dbms_output.put_line(lpad('-', 120, '-'));
  105. dbms_output.put_line('No such table: ' || p_duplet.b);
  106. dbms_output.put_line(lpad('-', 120, '-'));
  107. return;
  108. else
  109. null;
  110. dbms_output.put_line(lpad('-', 120, '-'));
  111. dbms_output.put_line(p_duplet.a || '.' || p_duplet.b || ' CONSTRAINTS');
  112. dbms_output.put_line(lpad('-', 120, '-'));
  113. end if;
  114. p_owner := p_duplet.a;
  115. p_table_name := p_duplet.b;
  116. for x in (
  117. select
  118. subA.constraint_name,
  119. subA.constraint_type,
  120. subA.position,
  121. subA.column_name,
  122. subB.table_name || '(' || subB.column_name || ')' reference,
  123. subA.owner,
  124. subA.r_owner
  125. from (
  126. select
  127. owner,
  128. constraint_name,
  129. table_name,
  130. ac.constraint_type,
  131. acc.position,
  132. acc.column_name,
  133. ac.r_owner,
  134. ac.r_constraint_name
  135. from
  136. all_constraints ac
  137. join all_cons_columns acc using(owner, constraint_name, table_name)
  138. ) subA
  139. left join (
  140. select
  141. owner,
  142. constraint_name,
  143. table_name,
  144. acc.position,
  145. acc.column_name
  146. from
  147. all_constraints ac
  148. join all_cons_columns acc using(owner, constraint_name, table_name)
  149. ) subB on
  150. subA.r_owner = subB.owner and
  151. subA.r_constraint_name = subB.constraint_name and
  152. subA.position = subB.position
  153. where
  154. subA.owner = p_owner and
  155. subA.table_name = p_table_name and
  156. subA.constraint_type != 'C'
  157. order by subA.constraint_type, subA.constraint_name, subA.position
  158. ) loop
  159. if (a_with_rep = 0) and (x.r_owner != x.owner) then
  160. goto CONTINUE;
  161. end if;
  162. p_counter := p_counter + 1;
  163. p_ti(p_counter).constraint_name := x.constraint_name;
  164. p_ti(p_counter).constraint_type := x.constraint_type;
  165. p_ti(p_counter).position := x.position;
  166. p_ti(p_counter).column_name := x.column_name;
  167. p_ti(p_counter).reference := x.reference;
  168. <<CONTINUE>>
  169. null;
  170. end loop;
  171. if p_ti.count = 0 then
  172. dbms_output.put_line(lpad('-', 120, '-'));
  173. dbms_output.put_line('Table ' || p_owner || '.' || p_table_name || ' have no constraints');
  174. dbms_output.put_line(lpad('-', 120, '-'));
  175. return;
  176. end if;
  177. for ind in p_ti.first..p_ti.last loop
  178. if p_constraint_name = p_ti(ind).constraint_name then
  179. p_ti(ind).constraint_name := '-';
  180. p_ti(ind).constraint_type := '-';
  181. else
  182. p_constraint_name := p_ti(ind).constraint_name;
  183. dbms_output.put_line(lpad('-', 120, '-'));
  184. end if;
  185. dbms_output.put_line(
  186. p_ti(ind).constraint_name || ' ' ||
  187. p_ti(ind).constraint_type || ' ' ||
  188. Nvl(p_ti(ind).position, 1) || ' ' ||
  189. p_ti(ind).column_name || ' ' ||
  190. p_ti(ind).reference
  191. );
  192. end loop;
  193. dbms_output.put_line(lpad('-', 120, '-'));
  194. exception
  195. when others then
  196. dbms_output.put_line('ERROR IN HELPER_PKG.DESC_CONS');
  197. end;
  198.  
  199. procedure desc_inds(a_owner_table in varchar2, a_with_rep in number default 0)
  200. as
  201. type tab_info_row is record(
  202. index_name char(30),
  203. column_position number(2),
  204. column_name char(30)
  205. );
  206. type tab_info is table of tab_info_row index by binary_integer;
  207. p_ti tab_info;
  208. p_counter number(8) default 0;
  209. p_index_name char(30);
  210. p_owner varchar2(30);
  211. p_table_name varchar2(30);
  212. p_duplet varchar2_duplet;
  213. begin
  214. p_duplet := find_table(a_owner_table);
  215. if p_duplet.a is null then
  216. dbms_output.put_line(lpad('-', 120, '-'));
  217. dbms_output.put_line('No such table: ' || p_duplet.b);
  218. dbms_output.put_line(lpad('-', 120, '-'));
  219. return;
  220. else
  221. dbms_output.put_line(lpad('-', 120, '-'));
  222. dbms_output.put_line(p_duplet.a || '.' || p_duplet.b || ' INDEXES');
  223. dbms_output.put_line(lpad('-', 120, '-'));
  224. end if;
  225. p_owner := p_duplet.a;
  226. p_table_name := p_duplet.b;
  227. for x in (
  228. select
  229. index_name,
  230. column_position,
  231. column_name
  232. from all_ind_columns
  233. where
  234. index_owner = p_owner
  235. and table_owner = p_owner
  236. and table_name = p_table_name
  237. order by index_name, column_position
  238. ) loop
  239. p_counter := p_counter + 1;
  240. p_ti(p_counter).index_name := x.index_name;
  241. p_ti(p_counter).column_position := x.column_position;
  242. p_ti(p_counter).column_name := x.column_name;
  243. <<CONTINUE>>
  244. null;
  245. end loop;
  246. if p_ti.count = 0 then
  247. dbms_output.put_line(lpad('-', 120, '-'));
  248. dbms_output.put_line('Table ' || p_owner || '.' || p_table_name || ' have no indexes');
  249. dbms_output.put_line(lpad('-', 120, '-'));
  250. return;
  251. end if;
  252. for ind in p_ti.first..p_ti.last loop
  253. if p_index_name = p_ti(ind).index_name then
  254. p_ti(ind).index_name := '-';
  255. p_ti(ind).index_name := '-';
  256. else
  257. p_index_name := p_ti(ind).index_name;
  258. dbms_output.put_line(lpad('-', 120, '-'));
  259. end if;
  260. dbms_output.put_line(
  261. p_ti(ind).index_name || ' ' ||
  262. Nvl(p_ti(ind).column_position, 1) || ' ' ||
  263. p_ti(ind).column_name
  264. );
  265. end loop;
  266. dbms_output.put_line(lpad('-', 120, '-'));
  267. exception
  268. when others then
  269. dbms_output.put_line('ERROR IN HELPER_PKG.DESC_INDS');
  270. end;
  271.  
  272. end;
  273. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement