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 返回类型是varchar2IS 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) 可以理解为 直接用游标打开LOOPFETCH RefCur_KnjKioRrk INTO strTemp;EXIT WHEN RefCur_KnjKioRrk%NOTFOUND;IF strKnjkiorrk IS NULL THENstrKnjkiorrk := strTemp;ELSEstrKnjkiorrk := 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;