orcale 存储过程问题!!急

Josir 2009-03-03 11:17:48
之前是SQL数据库中的存储过程脚本,现在把其移植到oracle数据库中,但是提示“该存储过程无效”,请各位帮忙看下谢谢了:

--导入工资数据的存储过程
create or replace procedure pr_importwatadata(@par_year char(4),@par_period char(2)) as
begin
delete from xh_watadata;
insert into xh_watadata
(
cyear,
cperiod,
pk_deptdoc,
deptcode,
deptname,
psnid,
psncode,
psnname,
f_16,
f_17,
f_21
)
select
a.cyear,
a.cperiod,
c.pk_deptdoc,
c.deptcode,
c.deptname,
a.psnid,
b.psncode,
b.psnname,
d.jobname , --职务系数,后改成岗位
a.f_59 , --系数
a.f_21 --日工资
from wa_data as a left join bd_psndoc as b on a.psnid = b.pk_psndoc left join bd_deptdoc as c on c.pk_deptdoc = b.pk_deptdoc left join om_job as d on a.pk_om_job=d.pk_om_job
where
a.cyear = @par_year and
a.cperiod = @par_period and
a.classid = (select pk_wa_class from wa_waclass where vwaclassname='工资') and
a.dr = 0 and
b.psnclscope = 0 and
b.dr=0
order by
c.deptcode,
b.psncode
end pr_importwatadata
...全文
118 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zigzagsoft 2009-03-03
  • 打赏
  • 举报
回复
设置改procedure为debug模式,
然后调用该过程,进行调试吧。

没法帮。
Josir 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 oraclelogan 的回复:]
引用 4 楼 Josir 的回复:
因为报错是在后台执行时,所以代码调用还没有涉及到!你看这情况是??


你调用的时候是哪个用户啊?哪个包下面的啊?
[/Quote]

是在 pl/sql中执行的脚本,执行过程没问题,执行之后在 pl/sql 左侧的“procedures” 存储过程包中看到刚增加的存储过程是有问题的,打开查看时,提示该存储过程无效!
Josir 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 oraclelogan 的回复:]
引用 4 楼 Josir 的回复:
因为报错是在后台执行时,所以代码调用还没有涉及到!你看这情况是??


你调用的时候是哪个用户啊?哪个包下面的啊?
[/Quote]

SQL数据库中是 dbo用户
oraclelogan 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Josir 的回复:]
因为报错是在后台执行时,所以代码调用还没有涉及到!你看这情况是??
[/Quote]

你调用的时候是哪个用户啊?哪个包下面的啊?
Josir 2009-03-03
  • 打赏
  • 举报
回复
因为报错是在后台执行时,所以代码调用还没有涉及到!你看这情况是??
Josir 2009-03-03
  • 打赏
  • 举报
回复
是这样子的,我也是在pl/sql里执行没错,但是在pl/sql左侧的 “procedures” 中提示错误,无效的存储过程!
cosio 2009-03-03
  • 打赏
  • 举报
回复
那应该没有问题,你调用存储过程的语句是?
fuyou001 2009-03-03
  • 打赏
  • 举报
回复
我copy你代码在我pl/sql里执行,没有报错
ntahua 2009-03-03
  • 打赏
  • 举报
回复
NC EHR里用的?
SQL SERVER的语法很多跟ORACLE不同的。比如左右连接。其他地方抄来一段例子:

在Oracle PL-SQL中,左连接和右连接以如下方式来实现
查看如下语句:
SELECT emp_name, dept_name
FORM Employee, Department
WHERE Employee.emp_deptid(+) = Department.deptid 此SQL文使用了右连接,即“(+)”所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配,也就是说上例中无论会不会出现某个部门没有一个员工的情况,这个部门的名字都会在查询结果中出现。
反之:
SELECT emp_name, dept_name
FORM Employee, Department
WHERE Employee.emp_deptid = Department.deptid(+)则是左连接,无论这个员工有没有一个能在Department表中得到匹配的部门号,这个员工的记录都会被显示 。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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