programing

오라클에서 열의 가장 긴 행 길이 찾기

newsource 2023. 6. 29. 20:11

오라클에서 열의 가장 긴 행 길이 찾기

오라클에서 열에서 가장 긴 행의 길이를 찾을 수 있는 방법이 있는지 아는 사람이 있습니까?

기본적으로 가장 긴 행의 길이를 얻은 다음 그 길이에 1을 더한 값을 사용해야 합니다.SUBSTR열의 출력을 가장 긴 문자열보다 한 문자 더 길게 만듭니다.


하지만, 그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)||' '

실행 시 작동하지 않았습니다.

이것은 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)) as MaxLength
from MyTable

이렇게 하면 원하는 작업을 수행할 수 있습니다.

select max(length(MyColumn)) from MyTable;

달성하려는 항목에 따라 열의 데이터와 다음과 같은 정확히 한 공간을 출력할 수도 있습니다.

select rtrim(MyColumn)||' ' from MyTable;

table_name에서 max(LENGTH(컬럼n_name))를 선택합니다.

함수 없음:

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;

최대 길이를 사용할 수 있도록 하려면 임베디드에서 선택합니다.

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

열의 모든 값을 가장 긴 값 +1로 패딩하려면 다음 작업을 수행합니다.

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

최대 열 정의를 사용하려면 올바른 접근 방식을 제안합니다.

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;

언급URL : https://stackoverflow.com/questions/3361761/find-the-length-of-the-longest-row-in-a-column-in-oracle