我有一個正在執行動態選擇查詢的存儲過程。查詢字符串很大。以下是當運行該SP它顯示以下錯誤無法在存儲過程中運行大型動態選擇查詢
ORA-00600: internal error code, arguments: [qcscbAddToSelLists], [], [], [], [], [], [], [], [], [], [], []
所以減少dynSqlComplete
變量的大小爲VARCHAR2(5000)中,然後運行該存儲過程所存儲的過程
create or replace procedure My_SP ( procRefCursor out sys_refcursor, --My other input variables here ) is dynSqlComplete varchar2(8000) := 'n/a'; begin dynSqlComplete := 'Large query here'; open procRefCursor for dynSqlComplete; end;
。我得到了以下錯誤:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
我曾妄圖很多事情,我也不想他們在這裏補充,因爲它會誤導。
- 編輯 - 2012年6月6日
大家好,
我能夠針點的問題,但我還沒有能夠解決這個問題。我試圖按部分運行查詢部分,並且發現拋出錯誤的查詢。它包含START WITH
,當我評論它時,查詢開始工作。我已經給出了下面的代碼並將錯誤代碼註釋掉了。
SELECT RowNum AS RowNumber1, GR.*, --LEVEL AS LineageLvl, VDE.* FROM (SELECT * FROM group_relations left outer join relation_classifier_instances RC on rc.relation_id = group_relations.Group_relation_id WHERE group_relation_type_id IN (19,20,32,38,42,43) and (rc.relation_id is null) ) GR LEFT OUTER JOIN Vendor_Feed_data_elements VDE ON GR.Group_Relation_Type_Id = 19 AND GR.Primary_GroupField_Id = VDE.Vendor_Data_Element_Id /* Code which is giving the error START WITH ( VDE.Vendor_Data_Element_Id IS NOT NULL ) CONNECT BY nocycle prior GR.RELATED_GROUPFIELD_ID = GR.PRIMARY_GROUPFIELD_ID*/
什麼你的DBA說什麼?相當肯定的是,ora 600可能需要Oracle支持才能實現。 – tbone
如果在打開遊標之前打印您生成的SQL語句(即,'dbms_output.put_line(dynSqlComplete)',然後嘗試手動執行該語句,該語句是否工作?如果是這樣,那麼您已經縮小了問題的範圍如果沒有,問題出在SQL語句本身或你生成的SQL語句格式錯誤 –
@Justin,我試過dbms_output.put_line(dynSqlComplete),其實我試過dbms_output .put_line('hi')只是在分配大查詢之前,但它不顯示,我認爲它只是在失敗之前,但是當我減小varchar2大小然後執行時,它顯示「hi」,然後字符串緩衝區錯誤即將到來 – samar