Recherche de la valeur dans toutes les tables de la base de données

J'ai besoin de trouver la table qui contient un peu de valeur dans ma base de données Oracle.

J'ai trouvé deux requêtes. La première requête, j'ai essayé:

declare
l_pattern varchar2(100) := 'По какому вопросу звонили?';
cursor cf is select table_name,column_name from user_tab_columns where data_type = 'VARCHAR2' order by table_name;
t_str varchar2(2000) := 'select count(*) from dual where exists( select null from ';
l_str varchar2(2000); 
l_where_clause varchar2(2000) := ' where 1=0';
l_last_table varchar2(100) := '';
l_cnt number := 0;
procedure query_ (i_txt varchar2) is
l_txt varchar2(4000) := i_txt;
l_ln number := length(l_txt);
l_pieces number := ceil(l_ln/250);
begin
for i in 1..l_pieces loop
dbms_output.put_line(substr(i_txt, 1+250*(i-1),least(250,l_ln-250*(i-1))));
end loop;
dbms_output.new_line;
end;
begin
for i in cf loop
if l_last_table <> i.table_name then
--  dbms_output.put_line(l_str||l_where_clause);
execute immediate l_str || l_where_clause ||')' into l_cnt;
if l_cnt > 0 then 
query_ ('select * from ' || l_last_table || l_where_clause || ';');
end if;
l_cnt := 0;
l_where_clause := ' where 1=0';
end if;
l_last_table := i.table_name;
l_str := t_str || i.table_name;
l_where_clause := l_where_clause || ' OR ' || i.column_name || ' like ''' ||l_pattern||'''';
end loop;
execute immediate l_str || l_where_clause ||')' into l_cnt;
if l_cnt > 0 then 
query_ ('select * from ' || l_last_table || l_where_clause || ';');
end if;
end;

Ce retourne l'erreur:

Error starting at line 1 in command:
declare
...
end;
Error report: ORA-06502: PL/SQL: numeric or value error: character
string buffer too small ORA-06512: at line 35
06502. 00000 -  "PL/SQL: numeric or value error%s"
*Cause:    
*Action: 
select * from MV_CATALOG_ITEM where 1=0 OR CODE like 'По какому
вопросу звонили?' OR UUID like 'По какому вопросу звонили?' OR
TITLE like 'По какому вопросу звонили?' OR PARENTITEMUUID like 'По
какому вопросу звонили?' OR CATALOGTITLE like 'По какому  вопросу
звонили?' OR FOLDERTITLE like 'По какому вопросу звонили?' OR
CATALOGUUID like 'По какому вопросу звонили?' OR CATALOGCODE like 'По
какому вопросу звонили?' OR FOLDERUUID like 'По какому вопросу
звонили?';
select * from MV_HIERARCHICAL_TEMPLATES where 1=0 OR STRINGCONTENT2
like 'По какому вопросу звонили?' OR STRINGCONTENT3 like 'По какому
вопросу звонили?' OR IDENTIFIER like 'По какому вопросу звонили?' OR
TEMPLATEUUID like 'По какому вопросу звонили? ' OR ATTRIBUTETITLE like
'По какому вопросу звонили?' OR STRINGCONTENT like 'По какому вопросу
звонили?' OR GROUPTITLE like 'По какому вопросу звонили?' OR INSTUUID
like 'По какому вопросу звонили?' OR OBJUUID like 'По какому вопросу
звонили?' OR TYP ECODE like 'По какому вопросу звонили?' OR GROUPUUID
like 'По какому вопросу звонили?';

La deuxième requête, j'ai essayé:

select table_name,
column_name
from( select table_name,
column_name,
to_number(
extractvalue(
xmltype(
dbms_xmlgen.getxml(
'select count(*) c from ' || table_name ||
' where to_char(' || column_name || ') = ''JONES'''
)
),
'ROWSET/ROW/C'
)
) cnt
from (select utc.*, rownum
from user_tab_columns utc
where data_type in ('CHAR', 'VARCHAR2') ) )
where cnt >= 0

Celle-ci rentre une grosse liste de tables et de colonnes et d'erreur:

Error starting at line 1 in command: 
select table_name,
...
where cnt >= 0 
Error report:
SQL Error: ORA-19202: Error occurred in XML processing
ORA-00936: missing expression
ORA-06512: at "SYS.DBMS_XMLGEN", line 176
ORA-06512: at line 1
19202. 00000 -  "Error occurred in XML processing%s"
*Cause:    An error occurred when processing the XML function
*Action:   Check the given error message and fix the appropriate problem

Je ne peux pas trouver un moyen de me.

  • double possible de Rechercher dans Tous les Champs De Toutes les Tables Pour Une Valeur Spécifique (Oracle)
  • J'obtiens un "bloc Anonyme complited" en permanence! Pourquoi??
  • C'est une bonne chose, n'est-ce pas, cela signifie qu'il fonctionne? Ou voulez-vous dire que vous ne voyez pas l'attend tables/colonnes qui correspondent à votre chaîne? Vous devez set serveroutput on pour voir la dbms_output messages (dans SQL*Plus, SQL Developer, ou probablement d'autres clients). Si ça ne montre rien, alors peut-être il n'y a pas de matches.
  • À partir du code que vous avez posté en réponse, le problème évident est que vous avez mis v_owner comme 'naucrm'. Qui devrait être 'NAUCRM'.