Oracleの列の最も長い行の長さを見つける方法があるかどうか誰かが知っていますか?
基本的に、最長の行の長さを取得し、その長さ+ 1をSUBSTR
で使用して、列の出力を最長の文字列よりも1文字長くする必要があります。
ありがとう
編集:
アドバイスありがとうございます。
ただし、MAX(LENGTH(column_name)) AS MAXLENGTH
アプローチでは必要な数が得られますが、SUBSTR(column_name,1, MAXLENGTH)
で使用しようとすると、無効な識別子エラーが発生します。
だから私は私が欲しかった数を返す関数を作り、それから使用しました:
SUBSTR(column_name,1,maxlengthfunc)
これは私に次の出力を与えました:
SUBSTR(NAME,1,MAXLENGTHFUNC)
のではなく:
SUBSTR(NAME, 1, 19)
そして、必要なように出力列のサイズを縮小しませんでした。
また
RTRIM(name)||' '
sQL開発者では、何もしませんでした。
ありがとう。
これはVARCHAR2列で機能します。
select max(length(your_col))
from your_table
/
CHAR列は明らかにすべて同じ長さです。列がCLOBの場合は、DBMS_LOB.GETLENGTH()を使用する必要があります。それが長ければ、それは本当にトリッキーです。
SELECT max(length(col_name)+1) as MyOutput
FROM table_Name
通常の出力は次のようになります
MyOutput
1 5
新しい出力は次のようになります
MyOutput
1 6
これはあなたが望むことをするはずです:
select max(length(MyColumn)) from MyTable;
達成しようとしていることに応じて、次のように列のデータと1つのスペースにデータを出力できることを知りたいと思うかもしれません。
select rtrim(MyColumn)||' ' from MyTable;
table_nameからmax(LENGTH(column_name))を選択します。
select max(length(MyColumn)) as MaxLength
from MyTable
機能なし:
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
あなたの機能で:
select
rpad(tbl.column_name, MaxLengthFunc + 1, ' ') as target_string
from
my_table tbl
パフォーマンスを向上させるには、関数をdeterminictic
として宣言します。
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を埋め込むには、次のようにします。
SELECT RPAD( column_name ,(SELECT MAX(LENGTH( column_name ))+1 FROM table)) FROM table;
Maxlengthを使用可能にするには、組み込みのselectから取得することができます
select <do something with maxlength here>
from
(select x.*,
( select max(length(yourcolumn)) from yourtable) as maxlength
from yourtable x)
列定義で最大値を使用するには、適切なアプローチを提案します。
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;
関数を呼び出すだけです:
SELECT F_GET_MAX_LENGTH_TAB_COLUMN(
pCOLUMN_NAME => 'AGN_ST_NOME',
pTABLE_NAME => 'GLO_AGENTES',
pOWNER => 'MGGLO' )
FROM DUAL;