long类型数据的截取

最近做了一个按日期进行分区的分区表,根据数据字典的值进行相应操作的 存储过程,需要对user_tab_partitions 的high_value字段进行截取 去其中的日期值 并转换成date型 然后进行一些条件的判断。
long的值:TO_DATE(' 2009-04-04 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
我需要从中截取 2009-04-04 并转换成 日期型数据来进行判断

SQL> declare n varchar2(30);
  2  begin
  3  select substr(high_value,11,10) into n from user_tab_partitions where table_name='ZYP_PT_DATE';
  4  dbms_output.put_line(n);
  5  end;
  6  /

declare n varchar2(30);
begin
select substr(high_value,11,10) into n from user_tab_partitions where table_name='ZYP_PT_DATE';
dbms_output.put_line(n);
end;

ORA-06550: 第 3 行, 第 15 列:
PL/SQL: ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 LONG
ORA-06550: 第 3 行, 第 1 列:
PL/SQL: SQL Statement ignored
经过多次尝试 终于找到了解决方法 那就是先将long型的数据传递给字符型 再由字符型进行转换
SQL>
SQL> declare n varchar2(50);
  2  begin
  3  select high_value into n from user_tab_partitions where table_name='ZYP_PT_DATE';
  4  dbms_output.put_line(substr(n,11,10));
  5  end;
  6  /

declare n varchar2(50);
begin
select high_value into n from user_tab_partitions where table_name='ZYP_PT_DATE';
dbms_output.put_line(substr(n,11,10));
end;

ORA-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小
ORA-06512: 在 line 3
还是报错 不过已经没有大问题了
SQL> declare n varchar2(500);
  2  begin
  3  select high_value into n from user_tab_partitions where table_name='ZYP_PT_DATE';
  4  dbms_output.put_line(length(n));
  5  end;
  6  /

83

PL/SQL procedure successfully completed
脱机出来的长度 应该要达到83才行

SQL> declare n varchar2(83);
  2  begin
  3  select high_value into n from user_tab_partitions where table_name='ZYP_PT_DATE';
  4  dbms_output.put_line(substr(n,11,10));
  5  end;
  6  /

2009-04-04

PL/SQL procedure successfully completed

SQL>
完成测试, 达到预期目的 。

end

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12216142/viewspace-584457/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12216142/viewspace-584457/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值