这个过程编译通过,但是执行报如下错,为什么?

yanjingrong 2008-12-03 12:03:35
程序:

create or replace procedure yjr004 is

v_rowid varchar2(30);
i number;
v1 number;
v_acct_month dw_key_target_js.acct_month%type;
v_js_type dw_key_target_js.js_type%type;
v_svc_id dw_key_target_js.svc_id%type;
v_area_name dw_key_target_js.area_name%type;
v_js_income dw_key_target_js.js_income%type;
v_js_payout dw_key_target_js.js_payout%type;
v_js_net_income dw_key_target_js.js_net_income%type;
v_b_asp dw_key_target_js.b_asp%type;

begin

for i in 1 .. 1000 loop

select no1,
acct_month,
js_type,
svc_id,
area_name,
js_income,
js_payout,
js_net_income,
b_asp
into v_rowid,
v_acct_month,
v_js_type,
v_svc_id,
v_area_name,
v_js_income,
v_js_payout,
v_js_net_income,
v_b_asp
from (select rownum no,
rowid no1,
acct_month,
js_type,
svc_id,
area_name,
js_income,
js_payout,
js_net_income,
b_asp
from dw_key_target_js)
where no = i;

select count(*)
into v1
from dw_key_target_js
where acct_month = v_acct_month
and js_type = v_js_type
and svc_id = v_svc_id
and area_name = v_area_name
and js_income = v_js_income
and js_payout = v_js_payout
and js_net_income = v_js_net_income
and b_asp = v_b_asp;

if v1 > 1 then

execute immediate 'delete from dw_key_target_js where rowid='||v_rowid;



end if;
end loop;
end yjr004;


编译通过,但是执行exec yjr004 报错:

ORA-00904: "AAAJRMAAHAAB3MNAAH": 标识符无效
ORA-06512: 在 "NEWEBA2.YJR004", line 64
ORA-06512: 在 line 2
...全文
93 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanjingrong 2008-12-03
  • 打赏
  • 举报
回复
谢谢大家,thank you very much!!!
sleepzzzzz 2008-12-03
  • 打赏
  • 举报
回复
像楼上linzhangs拼串当然也是可以的.建议使用bind变量方式吧.

范佩西_11 2008-12-03
  • 打赏
  • 举报
回复
少了单引号execute immediate 'delete from dw_key_target_js where rowid='||v_rowid;
create or replace procedure yjr004 is

v_rowid varchar2(30);
i number;
v1 number;
v_acct_month dw_key_target_js.acct_month%type;
v_js_type dw_key_target_js.js_type%type;
v_svc_id dw_key_target_js.svc_id%type;
v_area_name dw_key_target_js.area_name%type;
v_js_income dw_key_target_js.js_income%type;
v_js_payout dw_key_target_js.js_payout%type;
v_js_net_income dw_key_target_js.js_net_income%type;
v_b_asp dw_key_target_js.b_asp%type;

begin

for i in 1 .. 1000 loop

select no1,
acct_month,
js_type,
svc_id,
area_name,
js_income,
js_payout,
js_net_income,
b_asp
into v_rowid,
v_acct_month,
v_js_type,
v_svc_id,
v_area_name,
v_js_income,
v_js_payout,
v_js_net_income,
v_b_asp
from (select rownum no,
rowid no1,
acct_month,
js_type,
svc_id,
area_name,
js_income,
js_payout,
js_net_income,
b_asp
from dw_key_target_js)
where no = i;

select count(*)
into v1
from dw_key_target_js
where acct_month = v_acct_month
and js_type = v_js_type
and svc_id = v_svc_id
and area_name = v_area_name
and js_income = v_js_income
and js_payout = v_js_payout
and js_net_income = v_js_net_income
and b_asp = v_b_asp;

if v1 > 1 then

execute immediate 'delete from dw_key_target_js where rowid=''' ||
v_rowid || '''';

end if;
end loop;
end yjr004;
sleepzzzzz 2008-12-03
  • 打赏
  • 举报
回复
因你的v_rowid是一串字符,所以不能这么用execute immediate 。

--execute immediate 'delete from dw_key_target_js  where rowid='||v_rowid; 
这句改为:

execute immediate 'delete from dw_key_target_js where rowid= :1' using v_rowid;
内容概要:本文系统阐述了Java Persistence API(JPA)的核心概念、技术架构、核心组件及实践应用,重点介绍了JPA作为Java官方定义的对象关系映射(ORM)规范,如何通过实体类、EntityManager、JPQL和persistence.xml配置文件实现Java对象与数据库表之间的映射与操作。文章详细说明了JPA解决的传统JDBC开发痛点,如代码冗余、对象映射繁琐、跨数据库兼容性差等问题,并解析了JPA与Hibernate、EclipseLink等实现框架的关系。同时提供了基于Hibernate和MySQL的完整实践案例,涵盖Maven依赖配置、实体类定义、CRUD操作实现等关键步骤,并列举了常用JPA注解及其用途。最后总结了JPA的标准化优势、开发效率提升能力及在Spring生态中的延伸应用。 适合人群:具备一定Java基础,熟悉基本数据库操作,工作1-3年的后端开发人员或正在学习ORM技术的中级开发者。 使用场景及目标:①理解JPA作为ORM规范的核心原理与组件协作机制;②掌握基于JPA+Hibernate进行数据库操作的开发流程;③为技术选型、团队培训或向Spring Data JPA过渡提供理论与实践基础。 阅读建议:此资源以理论结合实践的方式讲解JPA,建议读者在学习过程中同步搭建环境,动手实现文中示例代码,重点关注EntityManager的使用、JPQL语法特点以及注解配置规则,从而深入理解JPA的设计思想与工程价值。

17,138

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧