web-dev-qa-db-fra.com

Trouver la longueur de la plus longue ligne d'une colonne dans Oracle

Est-ce que quelqu'un sait s'il existe un moyen de trouver quelle est la longueur de la plus longue ligne Dans une colonne d'Oracle?

Fondamentalement, je dois obtenir la longueur de la plus longue ligne, puis utiliser cette longueur plus 1 Avec SUBSTR pour que la sortie de la colonne ait un caractère plus long que la chaîne la plus longue.

Merci

MODIFIER:

Merci pour le conseil.

Cependant, l'approche MAX(LENGTH(column_name)) AS MAXLENGTH me donne le numéro que je veux mais lorsque j'essaie de l'utiliser avec SUBSTR(column_name,1, MAXLENGTH), une erreur d'identifiant non valide s'affiche.

J'ai donc créé une fonction pour renvoyer le nombre que je voulais utiliser:

SUBSTR(column_name,1,maxlengthfunc)

Cela m'a donné la sortie suivante:

SUBSTR(NAME,1,MAXLENGTHFUNC)

Plutôt que:

SUBSTR(NAME, 1, 19)

Et la taille de la colonne de sortie n'a pas été réduite comme je le souhaitais.

Également 

RTRIM(name)||' '

n'a rien fait pour moi dans le développeur SQL.

Merci.

10
electricsheep

Cela fonctionnera avec les colonnes VARCHAR2.

select max(length(your_col))
from your_table
/

Les colonnes CHAR ont évidemment la même longueur. Si la colonne est un objet CLOB, vous devrez utiliser DBMS_LOB.GETLENGTH (). Si c'est un LONG c'est vraiment difficile.

26
APC
SELECT max(length(col_name)+1) as MyOutput
FROM table_Name

La sortie normale ressemblerait à

   MyOutput
1     5

La nouvelle sortie ressemblerait à

   MyOutput
1     6
5
sealz

Cela devrait faire ce que vous voulez:

select max(length(MyColumn)) from MyTable;

En fonction de vos objectifs, vous pouvez également être amené à savoir que vous pouvez exporter les données dans la colonne, plus exactement un espace comme celui-ci:

select rtrim(MyColumn)||' ' from MyTable;
3
Colin Pickard

sélectionnez max (LENGTH (nom_colonne)) dans nom_table.

2
PaulJWilliams

sans fonction:

select 
  rpad(tbl.column_name, length_info.max_length+1, ' ') as target_string
from 
  table_name tbl,
  (
    select max(length(column_name)) max_length 
    from my_table
  ) 
    length_info

avec votre fonction:

select 
  rpad(tbl.column_name, MaxLengthFunc + 1, ' ') as target_string
from 
  my_table tbl

déclarez votre fonction en tant que determinictic pour une meilleure performance:

create or replace function MaxLengthFunc 
return number  
deterministic
as
  vMaxLen number;
begin

  select max(length(column_name)) 
  into vMaxLen
  from table_name;

  return vMaxLen;

end;
1
ThinkJet
select max(length(MyColumn)) as MaxLength
from MyTable
1
RedFilter

Pour remplir toutes les valeurs d'une colonne à la valeur la plus longue +1, vous pouvez procéder comme suit:

SELECT RPAD( column_name ,(SELECT MAX(LENGTH( column_name ))+1 FROM table)) FROM table;
0
mrrooster

Pour rendre le maxlength utilisable, vous voudrez peut-être l’obtenir d’une sélection intégrée.

select <do something with maxlength here> 
from
(select x.*, 
( select max(length(yourcolumn)) from yourtable) as maxlength 
from yourtable x)
0
hol

Pour utiliser le maximum dans la définition de colonne, je suggère la bonne approche: 

create or replace FUNCTION F_GET_MAX_LENGTH_TAB_COLUMN
(
  pCOLUMN_NAME  IN VARCHAR2 
, pTABLE_NAME   IN VARCHAR2 
, pOWNER        IN VARCHAR2 
) RETURN NUMBER AS 
  vLength NUMBER;
BEGIN

  BEGIN
    SELECT  DATA_LENGTH 
    INTO    vLength
    FROM ALL_TAB_COLUMNS 
    WHERE 
        COLUMN_NAME = pCOLUMN_NAME 
    AND TABLE_NAME  = pTABLE_NAME 
    AND OWNER       = pOWNER
    ;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      vLength := 0;
  END;

  RETURN vLength;
END F_GET_MAX_LENGTH_TAB_COLUMN;

Il suffit d'appeler la fonction:

SELECT F_GET_MAX_LENGTH_TAB_COLUMN(
    pCOLUMN_NAME => 'AGN_ST_NOME', 
    pTABLE_NAME  => 'GLO_AGENTES', 
    pOWNER => 'MGGLO' ) 
FROM DUAL;
0
AndyDaSilva52