2017-02-15 3 views
0

курсор есть, чтобы проверить право на участие в учебе. Однако я не могу даже составить сценарий, как я получаю несколько ошибок:У меня есть несколько ошибок PLS-00049

[Error] PLS-00049 (395: 46): PLS-00049: bad bind variable 'SORLCUR_PIDM'.

CURSOR C_ENSP IS 
    SELECT SFRENSP_ESTS_CODE 
      ,STVESTS_DESC 
       FROM STVESTS,SFRENSP 
       WHERE SFRENSP_PIDM = :Sorlcur_PIDM 
       AND SFRENSP_TERM_CODE = :sorlcur_TERM_CODE 
       AND SFRENSP_KEY_SEQNO = :SORLCUR_KEY_SEQNO 
       AND STVESTS_CODE = SFRENSP_ESTS_CODE; 

       CURSOR C_ENSP_SECOND IS 
    SELECT 'Y' 
    FROM SORLCUR, SFRENSP 
    WHERE SORLCUR_PIDM = :Sorlcur_PIDM 
    and SORLCUR_PIDM = SFRENSP_PIDM 
    AND sorlcur_TERM_CODE = :sorlcur_TERM_CODE 
    AND sorlcur_TERM_CODE = SFRENSP_TERM_CODE 
    AND SORLCUR_CURRENT_CDE = 'Y' 
    AND SORLCUR_CACT_CODE = 'ACTIVE' 
    AND SORLCUR_LMOD_CODE = 'LEARNER' 
    AND SORLCUR_PRIORITY_NO = 2 
    AND SFRENSP_KEY_SEQNO = SORLCUR_KEY_SEQNO 
    AND SFRENSP_ESTS_CODE NOT IN ('W', 'X' , 'Z'); 

    v_ENSP_SECOND VARCHAR2(1); 

    CURSOR c_cohort IS 
    SELECT chrt.sgrchrt_chrt_code 
    FROM sgrchrt chrt 
    WHERE sgrchrt_pidm = :sorlcur_pidm 
    AND NVL(chrt.sgrchrt_stsp_key_sequence,99999999) = :sorlcur_key_seqno 
    AND NVL(sgrchrt_term_code_eff,'~') = :stvterm_term_code; 

    CURSOR c_resd IS 
    SELECT sgbstdn_resd_code,stvresd_desc 
    FROM sgbstdn,stvresd 
    WHERE SGBSTDN_PIDM = :KEY_BLOCK.PIDM 
    AND SGBSTDN_TERM_CODE_EFF = :KEY_BLOCK.STVTERM_TERM_CODE 
    AND stvresd_code = sgbstdn_resd_code; 

    cursor c1 is 
    select skricas_cas_number, 
     skricas_cas_status 
    from skricas a    
    where a.SKRICAS_PIDM = :key_block.PIDM 
    and exists (select 'x' from sorlcur 
      where sorlcur_pidm = skricas_pidm 
      and sorlcur_seqno = skricas_lcur_seqno 
      and sorlcur_term_code = :key_block.stvterm_term_code) 
    and skricas_cas_status = 'USED' 
    and skricas_cas_exp_date = (select max(a1.skricas_cas_exp_date) 
          from skricas a1 
          where a1.skricas_pidm = a.skricas_pidm 
          and a1.skricas_cas_status = a.skricas_cas_status 
          ); 

-- TT06987 start 
    CURSOR get_JSopt_in IS 
     SELECT szrasop_opt_in 
     FROM szrasop 
     WHERE szrasop_pidm = :sorlcur.Sorlcur_PIDM 
     AND szrasop_term_code = :sorlcur.Sorlcur_TERM_CODE; 

    --- v_elig VARCHAR2(1); 

    CURSOR get_max_szrolps IS  
    SELECT MAX(SZROLPS_SEQ_NO) 
        FROM SATURN.SZROLPS 
        WHERE SZROLPS_PIDM = :sorlcur.Sorlcur_PIDM 
    AND SZROLPS_TERM_CODE = :sorlcur.Sorlcur_TERM_CODE; 

    v_max_stage szrolps.szrolps_seq_no%TYPE; 

-- TT06987 end 

    BEGIN 

       IF :sorlcur_program IS NOT NULL THEN 
           :SORLCUR_SMRPCMT_TEXT := F_UOG_GET_COMMENT(:sorlcur_program, :sorlcur_term_code, 'PRGTIT'); 
           OPEN C_ENSP; 
           FETCH C_ENSP INTO :SFRENSP_ESTS_CODE, :ESTS_DESCRIPTION; 
           CLOSE C_ENSP; 

           OPEN C_ENSP_SECOND; 
           FETCH C_ENSP_SECOND INTO v_ENSP_SECOND ; 
           IF C_ENSP_SECOND%NOTFOUND THEN 
               :secondary_prog := 'N'; 
           ELSE 
               :secondary_prog := 'Y'; 
           END IF; 
           CLOSE C_ENSP_SECOND; 

       END IF; 

       OPEN c_cohort; 
       FETCH c_cohort 
       INTO :ENTRY_COHORT; 
       CLOSE c_cohort; 

    OPEN c_resd; 
    FETCH c_resd 
    INTO :sgbstdn_resd_code,:stvresd_desc; 
    CLOSE c_resd; 

       SELECT STVATTS_DESC 
       INTO :mode_desc 
    FROM STVATTS 
    WHERE :sorlcur_mode_code = STVATTS.STVATTS_CODE 
    AND STVATTS.STVATTS_CODE LIKE 'M%'; 

    select stvstyp_desc 
    into :sorlcur.styp_desc 
    from stvstyp 
    where :SORLCUR_STYP_CODE = stvstyp_code; 

    :sorlcur.SITE_DESC := gb_stvsite.f_get_description(:SORLCUR_SITE_CODE); 




    get_last_section_completed; 
-- added by Mary for 5095 
       open c1; 
       fetch c1 into :cas_number, 
           :cas_status; 
close c1; 


-- TT06987 start 
    -- Student eligible?? 
    IF hwzkimag.F_eligible_js (:sorlcur.Sorlcur_PIDM, :sorlcur.sorlcur_TERM_CODE) 
    THEN 
    :optin_elig := 'Y'; 
    END IF; 

--message(:optin_elig);message(:optin_elig); 
    IF NVL(:optin_elig,'XXX') = 'Y' THEN 

    OPEN    get_max_szrolps; 
    FETCH get_max_szrolps 
    INTO v_max_stage; 
    CLOSE get_max_szrolps; 

    -- ELigible and got passed the opt in/opt out stage 7. 
    IF v_max_stage >= 7 THEN 

       OPEN get_JSopt_in; 
        FETCH get_JSopt_in 
     INTO :optin_yes; 
     CLOSE get_JSopt_in; 
        set_item_property('jsopt_message',visible,property_false); 
    -- Eligible but has not passed opt in/opt out stage 7. 
    ELSE   
     :jsopt_message := 'OLR not complete'; 
        set_item_property('jsopt_message',visible,property_true); 
    END IF; 
    END IF; 
-- TT06987 end 
+0

однажды я взлетать «:» от: sorlcur_PIDM, то я получаю ошибку недопустимый идентификатор, я также проверил мои таблицы с именем столбца и там не любая разница. –

+0

опубликовать полный код или что-то, что дает обзор того, что вы пытаетесь сделать – XING

+0

@XING .. Я отредактировал сообщение с полным кодом –

ответ

0

Я решил эту проблему. В приведенном ниже коде были две ошибки. 1-я - неверная переменная привязки, а вторая - недопустимый идентификатор.

CURSOR C_ENSP IS 
     SELECT SFRENSP_ESTS_CODE 
       ,STVESTS_DESC 
        FROM STVESTS,SFRENSP 
        WHERE SFRENSP_PIDM = :Sorlcur_PIDM 
        AND SFRENSP_TERM_CODE = :sorlcur_TERM_CODE 
        AND SFRENSP_KEY_SEQNO = :SORLCUR_KEY_SEQNO 
        AND STVESTS_CODE = SFRENSP_ESTS_CODE; 

первого - я вынул колон на имя столбцов (например: sorlcur_pidm просто sorlcur_pidm) 2-я - имя таблицы sorlcur не было определен, как я звала столбцы таблицы из 3-х различных таблиц.

- Правильный синтаксис ниже -

CURSOR C_ENSP IS 
      SELECT SFRENSP_ESTS_CODE 
        ,STVESTS_DESC 
         FROM STVESTS,SFRENSP,SORLCUR 
         WHERE SFRENSP_PIDM = Sorlcur_PIDM 
         AND SFRENSP_TERM_CODE = sorlcur_TERM_CODE 
         AND SFRENSP_KEY_SEQNO = SORLCUR_KEY_SEQNO 
         AND STVESTS_CODE = SFRENSP_ESTS_CODE; 
+0

Как вы уже выяснили, переменные PL/SQL не имеют никакого префикса. ':' указывает переменную привязки или хоста, которая здесь не нужна. (См. Http://stackoverflow.com/questions/26256597/what-is-the-difference-between-plsql-bind-variables-and-host-variables) –