PL-SQL - может кто-нибудь сказать мне, что делает этот код - PullRequest
0 голосов
/ 03 декабря 2010
 FUNCTION encounter_for_dataset(p_check_answer_master_id IN check_list_answer_master.check_answer_master_id%TYPE) RETURN NUMBER
  IS

    l_key_type      check_list_answer_master.key_type%TYPE;
    l_key           check_list_answer_master.key%TYPE;
    l_encounter_id  NUMBER := 0;

  BEGIN

    IF p_check_answer_master_id IS NOT NULL THEN

      SELECT clam.key_type, NVL(clam.key,'0')
      INTO   l_key_type, l_key
      FROM check_list_answer_master clam
      WHERE clam.check_answer_master_id = p_check_answer_master_id;

      IF l_key_type = 'E' THEN

        BEGIN
          l_encounter_id := TO_NUMBER(l_key);
        EXCEPTION
          WHEN OTHERS THEN
            l_encounter_id := 0;
        END;

      END IF; -- l_key_type = 'E'

    END IF; -- p_check_answer_master_id is not null

    RETURN l_encounter_id;

  END encounter_for_dataset;

Ответы [ 3 ]

4 голосов
/ 03 декабря 2010

построчное резюме

FUNCTION encounter_for_dataset(
    p_check_answer_master_id IN check_list_answer_master.check_answer_master_id%TYPE 
    --this is the input variable (note the table.column%type this forces the variable to adhere that the column type if it changes
    ) RETURN NUMBER --what type to return
  IS
  /** declaration section, note it is using the table.column%type --this is good practice in case they change
  */
    l_key_type      check_list_answer_master.key_type%TYPE;
    l_key           check_list_answer_master.key%TYPE;
    l_encounter_id  NUMBER := 0;

  BEGIN
    --if the passed in value is NOT null do the logic within the IF statement
    IF p_check_answer_master_id IS NOT NULL THEN


      --insert key_type into l_key_type,
      --and insert the key (if null then 0) into l_key
      --where the check_answer_master_id is equal to the passed in variable
      --DO NOTE, IF THERE is NO DATA FOUND it will throw a NO_DATA_FOUND exception which is not handled
      SELECT clam.key_type, NVL(clam.key,'0')
      INTO   l_key_type, l_key
      FROM check_list_answer_master clam
      WHERE clam.check_answer_master_id = p_check_answer_master_id;

      -- if the key type is e, then 'cast' the l_key into a number
      --when any exception happens during the 'cast' just set it to 0
      IF l_key_type = 'E' THEN

       /**this begin..end block allows encapsulation of exception logic as it is used, pretty much a nested try/catch within the function -- this error will not bubble up to the calling program, whereas if the p-check_answer_master_id is not in clam, then that error will bubble up*/
        BEGIN 
          l_encounter_id := TO_NUMBER(l_key);
        EXCEPTION
          WHEN OTHERS THEN
            l_encounter_id := 0;
        END;

      END IF; -- l_key_type = 'E'

    END IF; -- p_check_answer_master_id is not null

       --retrun the value (note it defaults to 0)
    RETURN l_encounter_id;

  END encounter_for_dataset;
4 голосов
/ 03 декабря 2010

Документация Oracle находится в свободном доступе через Интернет.Это довольно читабельно и полезно для начинающего пользователя. PL / SQL руководство пользователя и SQL Reference было бы хорошим началом, если бы Рэнди не ответил на вопрос к вашему удовлетворению.функция, которая передается в значении и возвращает число.Переданное значение используется для поиска таблицы, в зависимости от значения, найденного в таблице, различные значения передаются обратно.Если l_key_type (который находится в таблице), тогда значение l_key передается обратно, иначе 0.

3 голосов
/ 03 декабря 2010

кто-то переходит в число,

тогда, если это число не равно нулю,

запрос из таблицы check_list_answer_master для типа ключа

если этот тип 'E', то вернуть ключ как 'Встречный_ид'

в противном случае вернуть 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...