ORA-06502 assigning values from SQL to PL/SQL variable

來源:互聯網
上載者:User

最近SQL查詢返回的結果給PL/SQL變數出現ORA-06502錯誤。這個錯誤的描述是ORA-06502: PL/SQL: numeric or value error: character string buffer too small. 顯而易見的是字元變數定義的長度不夠,加到20,到100,繼續06502,汗,咋回事呢?

1、問題描述
  --出現問題是在一個package裡,有兩個參數遊標,一個父遊標,一個子遊標,當父遊標輸出的結果傳遞值給子遊標時提示值太大
  --父遊標原sql語句較長,且複雜,為簡化描述下面構造其環境

  -->Oracle 版本 
  goex_admin@CNMMBO> select * from v$version;
 
  BANNER
  ----------------------------------------------------------------
  Oracle Database 10g Release 10.2.0.3.0 - 64bit Production
  PL/SQL Release 10.2.0.3.0 - Production
  CORE    10.2.0.3.0      Production
  TNS for Linux: Version 10.2.0.3.0 - Production
  NLSRTL Version 10.2.0.3.0 - Production
 
  -->建立一個測試表t並插入3條記錄
  goex_admin@CNMMBO> create table t(dt char(8));
 
  Table created.
 
  goex_admin@CNMMBO> insert into t select '20121218' from dual;
 
  1 row created.
 
  goex_admin@CNMMBO> insert into t select '20121219' from dual;
 
  1 row created.
 
  goex_admin@CNMMBO> insert into t select '20121220' from dual;
 
  1 row created.
 
  goex_admin@CNMMBO> commit;
 
  Commit complete.
 
  -->使用下面的查詢輸出結果時報ora-06502錯誤
  -->查詢語句也比較簡單,取表t的dt列的最小值,在外層查詢賦值給變數
  -->外層的子查詢貌似畫蛇添足,純粹是類比原有環境
  goex_admin@CNMMBO> DECLARE
    2    tradedate_out  CHAR (100);
    3  BEGIN
    4    SELECT tradedate
    5      INTO tradedate_out
    6      FROM (SELECT MIN (dt) AS tradedate FROM t) d;
    7 
    8    DBMS_OUTPUT.Put_Line ('trade_date = ' || tradedate_out);
    9  END;
  10  /
  DECLARE
  *
  ERROR at line 1:
  ORA-06502: PL/SQL: numeric or value error: character string buffer too small
  ORA-06512: at line 4

2、改寫查詢
  -->如果我們去掉外層查詢沒有類似的錯誤發生
  -->如此這般,難道是值由子查詢到外層的時候產生了變異?
  goex_admin@CNMMBO> DECLARE
    2    tradedate_out  CHAR (100);
    3  BEGIN
    4    SELECT MIN (dt) INTO tradedate_out FROM t;
    5 
    6    DBMS_OUTPUT.Put_Line ('trade_date = ' || tradedate_out);
    7  END;
    8  /
  trade_date = 20121218
 
  PL/SQL procedure successfully completed.

  • 1
  • 2
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.