2015-07-02 3 views
-1

У меня есть ошибка, «SQL Statement ignored», когда я создаю спецификацию и тело базы данных пакетов в PL/SQL.Заявление SQL игнорируется при попытке открыть курсор

Я написал этот код:

PROCEDURE Get_All_Link_Recent_Result 
    (pi_userid  IN TLMS_CM_RESULT.USERID%TYPE, 
     pi_email   IN TLMS_CM_RESULT.EMAIL%TYPE, 
     pi_testid  IN TLMS_CM_RESULT.TESTID%TYPE, 
     po_ret_code  OUT VARCHAR2, 
     po_ret_message OUT VARCHAR2, 
     po_ref_cursor OUT type_cm_result_refcur 
    ) IS 
    l_userid   TLMS_CM_RESULT.USERID%TYPE; 
    l_testid   TLMS_CM_RESULT.TESTID%TYPE; 
    BEGIN 
     l_userid := pi_userid || 0; 
     l_testid := pi_testid || 0; 
    OPEN po_ref_cursor 

    FOR SELECT * FROM 
     TLMS_CM_RESULT WHERE 
     USERID LIKE l_userid AND 
     TESTID LIKE l_testid AND 
     EMAIL = pi_email 
    ORDER BY 
     USERID; 

    po_ret_code := c_err_msg_other; 
    EXCEPTION 
    WHEN OTHERS THEN 
     po_ret_code := c_err_msg_other; 
     po_ret_message := SQLERRM; 
    END Get_All_Link_Recent_Result; 

Конкретная строка с "PL/SQL: SQL заявление игнорировать" ошибка линии

OPEN po_ref_cursor 

Таким образом, операторы после этого, начиная с FOR SELECT * FROM также приведет к ошибке.

ответ

0

OPEN CURSOR - независимая полная заявка. То есть, это должно заканчиваться точкой с двоеточием. В вашем случае отсутствует двоеточие.

Я не уверен, чего вы пытаетесь достичь с помощью своего кода, я не могу его протестировать. Но мне непонятно, почему вы открываете курсор, не закрывая его явно. Другое дело, вы пытаетесь открыть неявно другой курсор с FOR LOOP. Это не способ сделать это.

К примеру, я бы переписать часть кода следующим образом ::

OPEN po_ref_cursor; --add semi-colon 

FOR I IN (SELECT * FROM 
    TLMS_CM_RESULT WHERE 
    USERID LIKE l_userid AND 
    TESTID LIKE l_testid AND 
    EMAIL = pi_email 
ORDER BY 
    USERID) 

LOOP 

po_ret_code := I.c_err_msg_other; 

END LOOP; 

Предполагая c_err_msg_other является частью вашего SELECT запроса.

Смежные вопросы