Skip to main content

Case de cas

Deux jours ont un petit partenaire faisant un digital numérique numérique traditionnel, un petit partenaire nouveau au travail, ainsi que cette raison, et la raison est comme ceci:


Nous sommes temporairement appelés questions sur cette question comme un petit projet petit, un petit projet lorsqu'il fait une fermeture à glissière et que tout le Moyen-Quoc est perturbé, et plus de 60 tables sont estimées. Cela se trouve également plus tard, cela peut impliquer des centaines de tables) des problèmes de données et vous devez désormais trouver un problème recadré dans ces tables. Cette mission ne peut pas être complétée, il faut exécuter ^ _ ^
Il est une table qui doit être approuvée dans la base de données pour obtenir le tableau suivant.
Liste des tables répertoriées une table bloquée 1 Tableau A GAR Code 2 Tableau B CORBACK 3 TABLE B TABLE B TACHED 1 TABLE B TABLE B TRANCÉS 2

Après ce problème, je suis un peu Intéressé, plus Oracle est toujours relativement simple. Donc, en écrivant des tests, j'ai rencontré une tombeT CARTE ERREUR Pour un type de données pendant un moment et enfin, j'ai partagé avec succès le succès.



La première fois résume les étapes de l'idée de la mise en œuvre de ce code de besoin:

"1" "1" "Besoin de toutes les tables de la base, prennent son champ. Nom. (Ici curseur de déploiement)

"2" nécessite que le nom de la table soit, le champ Nom de la colonne attribue la variable.

Tourner 3 "3" 3 "3" Les variables de transplantation forment une instruction SQL dynamique pour effectuer
"4" pour transmettre une nouvelle variable de SQL dynamique
"5" insérera une forme correspondante,la nécessité d'être complétée.

Fabriquez une étape de code détaillée



Enfin, c'est le résultat du test d'ordinateur ma propre course, je le contrôle, la logique de données est en cours d'exécution n'est pas un problème. De.
--第一步,建一张存储我们最后输出内容的表create table test35(error_num number, --该列中出问题的数据行数table_name varchar2(256), --出问题的表名column_name varchar2(256) --出问题的列名);--第二步,创建一个存储过程实现CREATE OR REPLACE PROCEDURE SP_FIND_ERROR IStab_n varchar2(256);--用来放系统表名col_n varchar2(256);--用来放列名end_c number; --用来计数end_table varchar2(256);--用来放返回的表名end_col varchar2(256);--用来放返回列名sql_v varchar2(256);--用来放拼接SQLCURSOR get_table_info IS select table_name,column_name from user_tab_columns where data_type = 'VARCHAR2';--从oracle自带的系统数据字典表,拿到所有的表名以及其对应列名的两列结果集放入游标,--注意乱码针对是字符串的列,必须加数据类型的限制条件,不然后面会报错(踩坑的一步)BEGIN FOR X IN get_table_info LOOP --隐式游标循环 tab_n:= X.table_name; --从游标中获取表名赋予变量 col_n:= X.column_name; --从游标中获取列名赋予变量 sql_v:='select count('||col_n||'),'''||tab_n||''','''||col_n||''' from '||tab_n||' where length('||col_n||')>8 and rownum=1 '; --拼接sql,形成遍历查询该表该列符合where条件的数据条数,再加2个审计字段(表名,列名) --这样每次返回的就是一行数据(不能返回多行,除非使用动态游标) --这里用的筛选条件是长度大于8,方便测试,可根据自己实际情况去做调整,乱码可以用模糊查询或正则匹配。 execute immediate sql_v into end_c,end_table,end_col; --循环执行动态sql,将返回值赋予创建的3个新变量,数据类型注意不要出错。 if end_c >0 then insert into test35 values(end_c,end_table,end_col); --if条件判断,如果有问题的行大于0,则输出问题行数,表名,列名,插入test35表 end if; end loop; commit;end; --结束

Le code ci-dessus copie une vérification directe, des scripts en fait modifier le nom et les conditions de la table de sortie dans la SQL dynamique.


Sujets

Catégories