日期:2014-05-17  浏览次数:20789 次

大家帮忙看看这个是什么意思!!在线等!!!!!!!!
FUNCTION FILL_KNJKIORRK(V_PATIENTID IN VARCHAR2
  ) RETURN VARCHAR2 IS
  strCondition VARCHAR2(50) := '';
  RefCur_KnjKioRrk CursorType;
  strTemp VARCHAR2(50) := '';
  strKnjkiorrk VARCHAR2(32767):='';
  BEGIN
  IF V_PATIENTID IS NOT NULL THEN
  strCondition := strCondition || 'PATIENT_ID = ''' || V_PATIENTID ||'''';
  END IF;
  IF strCondition IS NOT NULL THEN
  strCondition := ' WHERE ' || strCondition ;
  END IF;
  OPEN RefCur_KnjKioRrk FOR 'SELECT
  PAST_NAME KnjKioRrk
  FROM
  TOS_D_PATIENT_PAST
  ' || strCondition ;
LOOP
FETCH RefCur_KnjKioRrk INTO strTemp;
EXIT WHEN RefCur_KnjKioRrk%NOTFOUND;
IF strKnjkiorrk IS NULL THEN
strKnjkiorrk := strTemp;
ELSE
strKnjkiorrk := strKnjkiorrk || '丄'|| strTemp;
END IF;
END LOOP;
  RETURN strKnjkiorrk;
  END FILL_KNJKIORRK;


上面的每句话都是什么意思啊? 能不能解释一下,,,我ORACLE不太熟悉

------解决方案--------------------
SQL code

FUNCTION FILL_KNJKIORRK(V_PATIENTID IN VARCHAR2
  ) RETURN VARCHAR2 
--定义一个function  返回类型是varchar2
IS
  strCondition VARCHAR2(50) := '';
  RefCur_KnjKioRrk CursorType;
  strTemp VARCHAR2(50) := '';
  strKnjkiorrk VARCHAR2(32767):='';
--定义一坨变量

  BEGIN
--开始
  IF V_PATIENTID IS NOT NULL THEN
  strCondition := strCondition || 'PATIENT_ID = ''' || V_PATIENTID ||'''';
  END IF;
--如果不为空  则字符连接赋值

  IF strCondition IS NOT NULL THEN
  strCondition := ' WHERE ' || strCondition ;
  END IF;
--同上

  OPEN RefCur_KnjKioRrk FOR 'SELECT
  PAST_NAME KnjKioRrk
  FROM
  TOS_D_PATIENT_PAST
  ' || strCondition ;

--上面拼好的字符串(一个完整的sql)  可以理解为 直接用游标打开

LOOP
FETCH RefCur_KnjKioRrk INTO strTemp;
EXIT WHEN RefCur_KnjKioRrk%NOTFOUND;
IF strKnjkiorrk IS NULL THEN
strKnjkiorrk := strTemp;
ELSE
strKnjkiorrk := strKnjkiorrk || '丄'|| strTemp;
END IF;
END LOOP;
--循环那个链接的sql字符串取出的值,进行判断赋值

  RETURN strKnjkiorrk;
--返回结果
  END FILL_KNJKIORRK;
--大功告成

------解决方案--------------------
LOOP
FETCH RefCur_KnjKioRrk INTO strTemp; --INTO 是oracle的赋值语句
EXIT WHEN RefCur_KnjKioRrk%NOTFOUND;--判断WHEN RefCur_KnjKioRrk为空退出
IF strKnjkiorrk IS NULL THEN --判断strKnjkiorrk IS NULL 
strKnjkiorrk := strTemp;--strKnjkiorrk赋值
ELSE
strKnjkiorrk := strKnjkiorrk || '丄'|| strTemp;;--strKnjkiorrk赋值
END IF;--结束判断
END LOOP;