【发布时间】:2017-05-12 05:45:11
【问题描述】:
我正在尝试执行下面的过程,但一直出错(ORA-00900:无效的 SQL 语句)
CREATE OR REPLACE PROCEDURE RESETUSERSESSION (run IN VARCHAR2)
IS
cursor usersessiondetail_cur IS
SELECT usd.CLIENTID,usd.OPERID,usd.REGISTER,usd.MACHINE_ID,usd.SESSIONNUMBER
FROM cashiering_dev.CSH_USER usr, cashiering_dev.CSH_USERSESSIONDETAIL usd
WHERE usr.clientid = usd.clientid
AND usr.operid = usd.operid
AND usr.register = usd.register
AND usr.machine_id = usd.machine_id
AND usr.sessionnumber = usd.sessionnumber
AND usr.Machine_ID = 'basrytest'
AND usd.LOGOFFDATETIME IS NULL;
BEGIN
OPEN usersessiondetail_cur;
FOR vItems in usersessiondetail_cur
LOOP
EXECUTE IMMEDIATE 'UPDATE csh_UserSessionDetail
SET ClientID =vItems.CLIENTID
WHERE ClientID =vItems.CLIENTID
AND OperID =vItems.OPERID
AND Register =vItems.REGISTER
AND Machine_ID =vItems.MACHINE_ID
AND SessionNumber =vItems.SESSIONNUMBER';
END LOOP;
CLOSE usersessiondetail_cur;
END;
【问题讨论】:
-
当您使用
cursor for循环时,不要显式打开/关闭游标 (OPEN usersessiondetail_cur)。另外,在这种情况下,绝对不需要使用动态 SQL('UPDATE' 语句)。 -
动态SQL完全没用。你为什么用它?
-
您是在尝试编译过程时遇到错误,还是在尝试执行过程时遇到错误?无论哪种方式,你是怎么做的 - 哪个客户端和命令等?你得到的完整错误堆栈是什么? (为什么你完全使用循环,而不是只进行一次更新?你的
run参数是什么?)
标签: oracle stored-procedures plsql cursor dynamic-sql