2011-09-16 145 views
0

嘿人即時得到一個SQL錯誤一路底部 在代碼塊結束時,執行語句之前:PL/SQL缺少右括號

語句:= v_first_sql || stmt || v_order_by_sql || v_last_sql;

什麼我做錯了什麼想法?

感謝

FUNCTION search_data 
(      
    p_start_ind  IN NUMBER, 
    p_end_ind  IN NUMBER, 
    p_cols_sort_by IN char_tab, 
    p_sort_orders  IN char_tab,              
    p_sor_number  IN VARCHAR2, 
    p_tcn   IN VARCHAR2, 
    p_sock    IN NUMBER, 
    p_work_id IN NUMBER, 
    p_sap    in NUMBER 


) 
RETURN bean_list 
IS 
    stmt    VARCHAR2(4000); 
    result    bean_list; 
    v_jp_ids   VARCHAR2(50); 
    v_first_sql   VARCHAR2(512); 
    v_row_count   NUMBER;    
BEGIN 
    v_row_count := p_end_index - p_start_index + 1; 

    v_first_sql := 'BEGIN '; 
    v_first_sql := v_first_sql || ' SELECT item_search(id, mwslin,sor_code, fyear, wyear,'; 
    v_first_sql := v_first_sql || ' sock, tcn, non, nomen,sap'; 
    v_first_sql := v_first_sql || ' row_count)'; 
    v_first_sql := v_first_sql || ' BULK COLLECT INTO :bind_var1';  
    v_first_sql := v_first_sql || ' FROM'; 
    v_first_sql := v_first_sql || ' ('; 
    v_first_sql := v_first_sql || ' SELECT /*+ FIRST_ROWS(' || TO_CHAR(v_row_count) || ') */ '; 
    v_first_sql := v_first_sql || ' ROWNUM rnum, a.*'; 
    v_first_sql := v_first_sql || ' FROM'; 
    v_first_sql := v_first_sql || ' ('; 
    v_first_sql := v_first_sql || ' SELECT ob.*, COUNT(*) OVER() AS row_count'; 
    v_first_sql := v_first_sql || ' FROM'; 
    v_first_sql := v_first_sql || ' ('; 

     v_order_by_sql := ') ob ' || temp_pkg.get_number_by(p_columns_sort_by, p_sort_orders); 
      v_last_sql := ') a'; 
    v_last_sql := v_last_sql || ' WHERE rownum <= ' || TO_CHAR(p_end_index); 
    v_last_sql := v_last_sql || ')'; 
    v_last_sql := v_last_sql || ' WHERE rnum >= ' || TO_CHAR(p_start_index); 
    v_last_sql := v_last_sql || ' ORDER BY rnum;'; 
    v_last_sql := v_last_sql || ' END;'; 




    stmt := v_first_sql || stmt  
EXECUTE IMMEDIATE stmt USING OUT result; 

RETURN result; 

END search_data; 
+1

如何顯示您的字符串'stmt'的值? –

+1

在嘗試執行之前,您能否打印出或以其他方式查看'stmt'的內容?看起來你很可能錯過了關閉某個地方的人。 –

+0

嗯..不知道如何輸出stmt ...我通常寫java ... sql的人出來的一週...大聲笑:) –

回答

2

在代碼中括號似乎是平衡的,所以問題顯然是在提出的案文通過

temp_pkg.get_order_by(p_columns_sort_by, p_sort_orders) 

此功能必須返回不平衡的括號。順便說一下,除非你花費很多時間來清理輸入,否則這是一個等待發生的SQL注入攻擊。