oracle如何提取字段的总长度

oracle如何提取字段的总长度,第1张

自己写一个函数:

create or replace function f_test(tableName varchar2, columnName varchar2)

return integer is

columLength integer;

begin

begin

execute immediate 'select DATA_LENGTH

from user_tab_columns

where table_name = ''' || tableName || ''' and column_name =''' || columnName||''''

into columLength;

exception

when no_data_found then

columLength := 0;

end;

return columLength;

end f_test;

然后将函数嵌入到你的查询语句中就可以得到字段长度

如:

select rpad(a1,f_test(table_name,字段名),' '),rpad(a2,a2字段总长,' '),rpad(a3,a3字段总长,' ') from table_name

declare

type array_type is array(5) of number(2);

a array_type := array_type(5,5,5,5,5);

begin

for i in 1acount loop

DBMS_OUTPUTPUT_LINE(a(i));

end loop;

end;

/

记住,你的数组最大长度是5,我给你初始化了5个数据。如果我给你初始3个数据,那么你的数组实际长度就是3,如果你a(4)就会数组越界,下面是一种扩展数组的方法:

declare type array_type is array(5) of number(2);

a array_type := array_type();

begin

for i in 15 loop

aextend;

a(i) := i;

end loop;

for i in 1acount loop DBMS_OUTPUTPUT_LINE(a(i));

end loop;

end;

/

当然你也可以用 aextend(5) 直接扩展5个(这个扩展长度不能大于5哦)

你有个地方理解错了type a is array(5) of number(2);这句只是声明了一个数据类型(数组类型)

此时你的a和number(2)是一个意思

a array_type := array_type(5,5,5,5,5);这个才是定义一个数组变量a

--LENGTH

返回字符串的长度;

SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from nchar_tst;

NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))

------ ------------ ---------------- ------------ --------- --------------------

高乾竞 3 北京市海锭区 6 999999 7

你好,oracle中有两个内置函数,分别是length和lengthb,他们的作用是length求得是字符长度,  lengthb求得是字节长度,如法如下:

SQL> select length('新春快乐') from dual; 

LENGTH('新春快乐') 

------------------ 

      4 

SQL> select lengthb('新春快乐') from dual; 

LENGTHB('新春快乐') 

------------------- 

      8

select rpad(substr(zcswz_zcbh,0,20),20,' ') as pi from zcswz

用rapd函数,后边的20是长度,引号里是个空格,也就是不足20位的补齐20位长度,长度不够的用空格填充

如果不能够录入 则系统会报错

如果能够录入

可能有空格字符

可以使用下面的语句踢掉空格

update item set itemID = trim(itemID);

commit;

WITH TMP_01 AS

  ( SELECT 101 nbr , 201301 d_month FROM dual

  UNION ALL

  SELECT 101 , 201302 FROM dual

  UNION ALL

  SELECT 101 , 201303 FROM dual

  UNION ALL

  SELECT 101 , 201306 FROM dual

  UNION ALL

  SELECT 102 , 201301 FROM dual

  UNION ALL

  SELECT 102 , 201303 FROM dual

  UNION ALL

  SELECT 102 , 201304 FROM dual

  UNION ALL

  SELECT 103 , 201301 FROM dual

  UNION ALL

  SELECT 103 , 201304 FROM dual

  UNION ALL

  SELECT 103 , 201306 FROM dual

  )

SELECT nbr,

  MAX(DECODE(dif,2,2,0)) ls_2 ,

  MAX(DECODE(dif,3,3,0)) ls_3 ,

  MAX(DECODE(dif,4,4,0)) ls_4 ,

  MAX(DECODE(dif,5,5,0)) ls_5 ,

  MAX(DECODE(dif,6,6,0)) ls_6

FROM

  (SELECT nbr,

    MAX(dif)+1 dif

  FROM

    (SELECT bnbr nbr,

      MAX(bd_month) - MIN(bd_month) dif,

      bcc cc

    FROM

      (SELECT a,

        to_number(ad_month)-rownum cc

      FROM

        ( SELECT nbr,d_month FROM TMP_01 ORDER BY nbr,d_month

        )a

      ) b

    GROUP BY bnbr,

      bcc

    )

  GROUP BY nbr

  )

GROUP BY nbr

ORDER BY nbr;

以上就是关于oracle如何提取字段的总长度全部的内容,包括:oracle如何提取字段的总长度、oracle 数组长度、请问在oracle中如何用SQL搜索字段的长度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9344775.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存