存储过程的问题 求大神解答,本人刚接触这个
createorreplaceprocedureupdateJzgInfoast_countnumber;--先声明一个变量t_count,表dual表的值赋给t_cou...
create or replace procedure updateJzgInfo as
t_count number;--先声明一个变量t_count,表dual表的值赋给t_count,如果这个值小于1,表示记录不存在,进行插入操作,反之,存在就进行修改操作。
cursor user_cursor is select ZGH from v_jzg@updateInfo; --定义游标
v_zgh v_jzg@updateInfo.ZGH%type;
begin
if not user_cursor%isopen then --打开游标
open user_cursor;
end if;
loop
fetch user_cursor into v_zgh; --提取数据
exit when user_cursor@notfound;
select count(*) into t_count from dual where exists(select 1 from sys_user where login_name = v_zgh);
If (t_count < 1) then--本地数据库不存在目标库的教职工编号(新建人员信息)
dbms_output.put_line('添加...');
insert into sys_user(id,LOGIN_NAME,name) select SEQ_SYS_USER.NEXTVAL,b.* from (select ZGH,XM from v_jzg@updateInfo t where t.ZGH = v_zgh) b;
Else --本地数据库存在目标库的教职工编号(更新人员信息)
dbms_output.put_line('修改...');
-- update sys_user s set (name) = (SELECT XM FROM v_jzg@updateInfo j WHERE s.LOGIN_NAME = j.ZGH);
-- dbms_output.put_line('修改成功');
End if;
end loop;
dbms_output.put_line('循环结束');
close user_cursor; --关闭游标
Exception
--错误处理部分。
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('内部执行的异常');
--OTHERS表示除了声明外的任意错误。
WHEN OTHERS THEN
-- vs_msg := 'ERROR IN updateJzgInfo('||is_ym||'):'||SUBSTR(SQLERRM,1,500);
ROLLBACK;
--把当前错误记录进日志表。
-- INSERT INTO LOG_INFO(proc_name,error_info,op_date) VALUES('updateJzgInfo',vs_msg,SYSDATE);
COMMIT;
RETURN;
end updateJzgInfo;
报了很多错,有的代码注释了
错误:PL/SQL: SQL Statement ignored
行:18
文本:select count(*) into t_count from dual where exists(select 1 from sys_user where login_name = v_zgh);
错误:PLS-00352: 无法访问另一数据库 'NOTFOUND'
行:20
文本:If (t_count < 1) then--本地数据库不存在目标库的教职工编号(新建人员信息)
错误:PLS-00201: 必须声明标识符 'USER_CURSOR@NOTFOUND'
行:20
文本:If (t_count < 1) then--本地数据库不存在目标库的教职工编号(新建人员信息)
错误:PL/SQL: Statement ignored 展开
t_count number;--先声明一个变量t_count,表dual表的值赋给t_count,如果这个值小于1,表示记录不存在,进行插入操作,反之,存在就进行修改操作。
cursor user_cursor is select ZGH from v_jzg@updateInfo; --定义游标
v_zgh v_jzg@updateInfo.ZGH%type;
begin
if not user_cursor%isopen then --打开游标
open user_cursor;
end if;
loop
fetch user_cursor into v_zgh; --提取数据
exit when user_cursor@notfound;
select count(*) into t_count from dual where exists(select 1 from sys_user where login_name = v_zgh);
If (t_count < 1) then--本地数据库不存在目标库的教职工编号(新建人员信息)
dbms_output.put_line('添加...');
insert into sys_user(id,LOGIN_NAME,name) select SEQ_SYS_USER.NEXTVAL,b.* from (select ZGH,XM from v_jzg@updateInfo t where t.ZGH = v_zgh) b;
Else --本地数据库存在目标库的教职工编号(更新人员信息)
dbms_output.put_line('修改...');
-- update sys_user s set (name) = (SELECT XM FROM v_jzg@updateInfo j WHERE s.LOGIN_NAME = j.ZGH);
-- dbms_output.put_line('修改成功');
End if;
end loop;
dbms_output.put_line('循环结束');
close user_cursor; --关闭游标
Exception
--错误处理部分。
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('内部执行的异常');
--OTHERS表示除了声明外的任意错误。
WHEN OTHERS THEN
-- vs_msg := 'ERROR IN updateJzgInfo('||is_ym||'):'||SUBSTR(SQLERRM,1,500);
ROLLBACK;
--把当前错误记录进日志表。
-- INSERT INTO LOG_INFO(proc_name,error_info,op_date) VALUES('updateJzgInfo',vs_msg,SYSDATE);
COMMIT;
RETURN;
end updateJzgInfo;
报了很多错,有的代码注释了
错误:PL/SQL: SQL Statement ignored
行:18
文本:select count(*) into t_count from dual where exists(select 1 from sys_user where login_name = v_zgh);
错误:PLS-00352: 无法访问另一数据库 'NOTFOUND'
行:20
文本:If (t_count < 1) then--本地数据库不存在目标库的教职工编号(新建人员信息)
错误:PLS-00201: 必须声明标识符 'USER_CURSOR@NOTFOUND'
行:20
文本:If (t_count < 1) then--本地数据库不存在目标库的教职工编号(新建人员信息)
错误:PL/SQL: Statement ignored 展开
1个回答
展开全部
create or replace procedure updateJzgInfo as
t_count number:=0;--先声明一个变量t_count,表dual表的值赋给t_count,如果这个值小于1,表示记录不存在,进行插入操作,反之,存在就进行修改操作。
cursor user_cursor is select ZGH from v_jzg@updateInfo; --定义游标
v_zgh v_jzg@updateInfo.ZGH%type;
begin
if not user_cursor%isopen then --打开游标
open user_cursor;
end if;
loop
fetch user_cursor into v_zgh; --提取数据
exit when user_cursor%notfound;
select count(*) into t_count from sys_user where login_name = v_zgh;
If (t_count < 1) then--本地数据库不存在目标库的教职工编号(新建人员信息)
dbms_output.put_line('添加...');
insert into sys_user(id,LOGIN_NAME,name) select SEQ_SYS_USER.NEXTVAL,b.ZGH,b.XM from (select ZGH,XM from v_jzg@updateInfo t where t.ZGH = v_zgh) b;
Else --本地数据库存在目标库的教职工编号(更新人员信息)
dbms_output.put_line('修改...');
update sys_user s set name = (SELECT XM FROM v_jzg@updateInfo j WHERE s.LOGIN_NAME = v_zgh);
dbms_output.put_line('修改成功');
End if;
end loop;
dbms_output.put_line('循环结束');
close user_cursor; --关闭游标
end updateJzgInfo;
今至电子科技有限公司
2024-08-23 广告
2024-08-23 广告
数据库备份是确保数据安全与业务连续性的关键环节。我们上海今至电子科技有限公司高度重视数据保护,定期执行全面的数据库备份策略。这包括使用先进工具和技术,对关键业务数据进行自动化备份,并存储在安全可靠的外部存储介质或云端。通过定期验证备份的完整...
点击进入详情页
本回答由今至电子科技有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询