這是代碼...這不是完整的代碼。我修剪下來到出現第一個錯誤,其中:ORA-06502:非常基本的字符串函數上的數字或值錯誤,給出了什麼?
FUNCTION get (
p_sql_o OUT VARCHAR2
) RETURN VARCHAR2 AS
str_sql VARCHAR2(4000);
BEGIN
str_sql := ' SELECT * FROM (SELECT A.*, ROWNUM RNUM FROM (' ||
' SELECT item_code, ' ||
' item_desc, ' ||
' monitor, ' ||
' measured, ' ||
' inventory, ' ||
' (measured - inventory) adj_amount, ' ||
' (inventory_cost * measured) measured_cost, ' ||
'inventory';
RETURN str_sql;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END get;
顯然,SQL是不完整的,但我不運行它。我簡單地返回SQL字符串,但我仍然得到一個錯誤:
ORA-06502:PL/SQL:數字或值錯誤:字符串緩衝區太小 ORA-06512:在第6行
這是莫名其妙的。有沒有人有任何線索,爲什麼會這樣?
你是否在get函數中出現錯誤?或者你是否在調用'get'函數的那一行獲得了錯誤?如果是後者,那就意味着調用者沒有爲該函數返回數據分配足夠大的字符串。另外,在函數中有一個'OUT'參數是非常奇怪的,除了'RETURN'語句之外,該名稱似乎還用於將SQL語句返回給調用者。這裏的OUT參數是完全多餘的。 – 2013-02-27 17:40:20
p_sql_o的值是什麼? – 2013-02-27 17:40:32
我可以運行這個沒有錯誤...所以是的,有點奇怪。你遠遠沒有接近4k的限制,所以即使你在UTF-16數據庫中運行它,字節數也不會達到4k。我懷疑你試圖把輸出放到一個太小的變量中。你怎麼打這個? – Ben 2013-02-27 17:40:40