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.
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.
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
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;
sélectionnez max (LENGTH (nom_colonne)) dans nom_table.
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;
select max(length(MyColumn)) as MaxLength
from MyTable
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;
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)
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;