【发布时间】:2011-05-04 22:46:54
【问题描述】:
我无法说服为什么我不能在 Oracle 函数 中添加 DML 操作,尤其是在 游标循环 中。我感觉Oracle不支持游标循环内的DML操作。
如果我需要在游标循环内插入表格,我该怎么办?在其中创建新的存储过程或其他什么?
错误消息:无法在查询中执行 DML 操作
这是我的功能,
CREATE OR REPLACE FUNCTION TEST_FUNC(U_ID IN VARCHAR2)
RETURN VARCHAR2
IS
V_MESSAGE VARCHAR2(30);
CURSOR C_PERSON (V_ID VARCHAR2) IS
SELECT NAME_UPPER
FROM TBL_PERSON
WHERE NAME_UPPER = V_ID;
BEGIN
FOR C_PERSON_CURSOR IN C_PERSON(U_ID)
LOOP
INSERT INTO TMP_PERSON(NAME) VALUES (C_PERSON_CURSOR.NAME_UPPER);
END LOOP;
RETURN V_MESSAGE;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END;
【问题讨论】: