/* oracle过程的语法 declare ... 定义变量 begin .... 具体的操作 exception ... end; */ --大概修改未经测试 declare --未命名的过程用declare t_smsid NUMBER; --你定义变量的语法错误 位置错 t_mobileno nvarchar2; t_smsfrom NUMBER; t_content nvarchar2; begin --begin位置错误 OPEN out_data FOR SELECT smsid,mobileno,smsfrom,content FROM SMS_SEND where smsid in (in_strSmsId); loop fetch out_data into t_smsid,t_mobileno,t_smsfrom,t_content; exit when out_data%NOTFOUND; --循环退出条 insert into SMS_SENDED VALUES (t_smsid,t_smsid,1,1,sysdate,'',0,'','','000001'); commit; --提交 end loop; close out_data; --关闭游标 exception when others then rollback;--异常处理 end;
1、如果使用open for 动态游标,open for 是执行语句,则应该放在执行块里面,即begin...end之间。 2、如果要放在说明部分,则请使用cursor c is select ....from... 来声明游标,但这个是静态游标。 3、如果要使用动态的in列表参数,请使用动态游标,但你的写法有问题,in列表参数只能拼接。DECLARE t_smsid%NUMBER ; -- t_mobileno%NVARCHAR2; -- t_smsfrom%NUMBER ; -- t_content%NVARCHAR2 ; -- BEGIN OPEN out_data FOR 'SELECT smsid, mobileno, smsfrom, content FROM SMS_SEND WHERE smsid IN (' || in_strSmsId || ')'; LOOP FETCH out_data INTO t_smsid, t_mobileno, t_smsfrom, t_content; EXIT WHEN out_data%NOTFOUND; --循环退出条件 IF out_data%FOUND THEN --获取数据 INSERT INTO SMS_SENDED VALUES (t_smsid, t_smsid, 1, 1, SYSDATE, '', 0, '', '', '000001'); END IF; END LOOP; COMMIT; END;
/*
oracle过程的语法
declare
... 定义变量
begin
....
具体的操作
exception ...
end;
*/
--大概修改未经测试
declare --未命名的过程用declare
t_smsid NUMBER; --你定义变量的语法错误 位置错
t_mobileno nvarchar2;
t_smsfrom NUMBER;
t_content nvarchar2;
begin --begin位置错误
OPEN out_data FOR
SELECT smsid,mobileno,smsfrom,content
FROM SMS_SEND
where smsid in (in_strSmsId);
loop
fetch out_data into t_smsid,t_mobileno,t_smsfrom,t_content;
exit when out_data%NOTFOUND; --循环退出条
insert into SMS_SENDED VALUES (t_smsid,t_smsid,1,1,sysdate,'',0,'','','000001');
commit; --提交
end loop;
close out_data; --关闭游标
exception when others then
rollback;--异常处理
end;
2、如果要放在说明部分,则请使用cursor c is select ....from... 来声明游标,但这个是静态游标。
3、如果要使用动态的in列表参数,请使用动态游标,但你的写法有问题,in列表参数只能拼接。DECLARE
t_smsid%NUMBER ; --
t_mobileno%NVARCHAR2; --
t_smsfrom%NUMBER ; --
t_content%NVARCHAR2 ; --
BEGIN
OPEN out_data FOR 'SELECT smsid, mobileno, smsfrom, content
FROM SMS_SEND
WHERE smsid IN (' || in_strSmsId || ')';
LOOP
FETCH out_data
INTO t_smsid, t_mobileno, t_smsfrom, t_content;
EXIT WHEN out_data%NOTFOUND; --循环退出条件
IF out_data%FOUND THEN
--获取数据
INSERT INTO SMS_SENDED
VALUES
(t_smsid, t_smsid, 1, 1, SYSDATE, '', 0, '', '', '000001');
END IF;
END LOOP;
COMMIT;
END;