2009-05-30 27 views
0

私は、私が結合から得るすべてのactivity_id(レコード)のためにそれをLOOPで実行する必要がある以下のSELECTを持っています。PLSQL関数のヘルプ

また、このSELECTは、詳細を取得するためにプロシージャの複数の場所で実行する必要があります - >私は以下のようにassign_コースまたはassign_testを実行します。

誰でもこの選択肢を持つ関数を書くのを手伝ってもらえますか?

入力はstrPersonid、strtplanid、P_このニーズは何かを返すようにしてい

FOR activity_id IN 
       (SELECT objact.activity_id, objact.activity_type,objact.IS_REQUIRED 
        FROM test_training_plan tp, 
         test_tp_objective tp_obj, 
         test_train_obj_activity objact 
       WHERE tp.tplan_id = tp_obj.tplan_id 
        AND tp.tplan_id = strtplanid 
        AND tp_obj.t_objective_id = p_objective_id 
        AND tp_obj.t_objective_id = objact.t_objective_id 
        AND objact.activity_id NOT IN (
          SELECT tplplr.activity_id 
          FROM test_learning_record lr, 
           test_learning_record lr1, 
           test_tp_learning_activity tplplr 
          WHERE lr.lr_catalog_history_id = tplplr.activity_id 
          AND lr.learning_record_id = 
                 tplplr.activity_lp_lr_id 
          AND tplplr.tp_lp_lr_id = lr1.learning_record_id 
          AND lr1.lr_catalog_history_id = 
               strtplanid 
          AND lr.lr_person_id = strPersonid 
          AND lr1.lr_person_id = strPersonid 
          AND lr.status IN 
              ('PASSED', 'WAIVED', 'TESTED_OUT')) 
        AND objact.activity_id NOT IN (
          SELECT event_id 
          FROM test_train_obj_activity toa, 
           test_event_sessions sessions, 
           test_learning_record lr1, 
           test_tp_learning_activity tplearnact, 
           test_learning_record tplr 
          WHERE toa.activity_id = sessions.event_id 
          AND sessions.event_session_id = 
                lr1.lr_catalog_history_id 
          AND lr1.learning_record_id = 
                tplearnact.activity_lp_lr_id 
          AND tplearnact.tp_lp_lr_id = 
                 tplr.learning_record_id 
          AND tplr.lr_catalog_history_id = 
               strtplanid 
          --AND toa.is_required = 1 
          AND toa.t_objective_id = obj.t_objective_id 
          AND tplr.lr_person_id = strPersonid 
          AND lr1.lr_person_id = strPersonid 
          AND lr1.status IN 
              ('PASSED', 'WAIVED', 'TESTED_OUT'))) 

      LOOP 

       IF (activity.activity_type = 'Course') 
       THEN 

        ASSIGN_COURSETP(strPersonid,activity.activity_id,strPersonid,activity.activity_type, 
        activity.IS_REQUIRED,strtplanid,v_straccreditingorg); 

       ELSif (activity.activity_type ='Test') 
       THEN 
        ASSIGN_TESTTP(strPersonid,activity.activity_id,strPersonid,activity.activity_type, 
        activity.IS_REQUIRED,strtplanid,v_straccreditingorg); 

       END IF; 
+0

誰か助けてもらえますか? –

答えて

2

objective_idていますか?

ボイラープレート機能コードにコードをラップできないのはなぜですか?

CREATE OR REPLACE Function ACTIVITY_ASSIGN_TESTTP 
(
    strtplanid IN number 
, strPersonid IN number 
, p_objective_id IN number 
) 
RETURN number 
IS 
    retVal number; 
BEGIN 

    -- YOUR CODE 

    RETURN retVal 
END ACTIVITY_ASSIGN_TESTTP;