日期:2014-05-17 浏览次数:20844 次
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;