自己写一个函数:
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搜索字段的长度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)