Comment couper toutes les colonnes de toutes les lignes de toutes les tables de type chaîne de caractères?
Dans Oracle 10g, est-il un moyen pour effectuer les opérations suivantes en PL/SQL?
for each table in database
for each row in table
for each column in row
if column is of type 'varchar2'
column = trim(column)
Merci!
Jetez un oeil à la USER_TABLES download.oracle.com/docs/cd/B28359_01/server.111/b28320/... et USER_TAB_COLUMNS download.oracle.com/docs/cd/B28359_01/server.111/b28320/... les tables système. Je pense que vous devriez être en mesure de formuler une requête dynamique à l'aide de ces à faire ce que vous voulez.
Utile! 😉
merci beaucoup pour les suggestions, ressemble à ce que les gars déroulant ci-dessous ne.
Utile! 😉
merci beaucoup pour les suggestions, ressemble à ce que les gars déroulant ci-dessous ne.
OriginalL'auteur daveslab | 2010-05-14
Vous devez vous connecter pour publier un commentaire.
Bien sûr, le faire à grande échelle des mises à jour dynamiques est potentiellement dangereux et coûteux en temps. Mais voici comment vous pouvez générer les commandes que vous souhaitez. C'est pour un seul schéma, et va tout simplement générer les commandes et de sortie. Vous pourriez les copier dans un script et de les examiner avant de les exécuter. Ou, vous pouvez changer
dbms_output.put_line( ... )
àEXECUTE IMMEDIATE ...
avoir ce script exécuter tous les états où ils sont générés.Si votre base de données contient plusieurs tables avec des colonnes de type VARCHAR2, le tampon de la dbms_output.put_line pourrait ne pas être suffisante pour contenir toutes les instructions UPDATE, de sorte qu'il sera pratique pour stocker l'UPDATE dans une table Oracle, à l'aide des instructions INSERT au lieu de DBMS_OUTPUT.PUT_LINE consolidés.
D'accord, le poulet, mais encore une fois pour mes tableaux, qui ne sont que quelques-uns, j'ai juste augmenté la mémoire tampon de sortie, et il a bien fonctionné.
OriginalL'auteur Dave Costa
Je présume que vous voulez faire cela pour chaque colonne dans un schéma, dans la base de données. En essayant de le faire pour les tables du dictionnaire serait une mauvaise idée...
Cela ne fonctionne que pour les champs qui sont VARCHAR2s en premier lieu. Si votre base de données contient CHAR champs, alors vous êtes hors de la chance, parce que CHAR les champs sont toujours rembourré à leur longueur maximale.
OriginalL'auteur Allan