long型別資料的擷取

lnwxzyp發表於2009-04-03
最近做了一個按日期進行分割槽的分割槽表,根據資料字典的值進行相應操作的 儲存過程,需要對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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章