求教各位老大帮我看下这个存储过程的错误如何避免,叩谢!

hezufya 2009-08-25 03:50:21
问题在下面代码的红字部分
如果P0100表存在的话,这段存储过程是正确运行的。
但是如果P0100表本来不存在,这段存储过程就会报错“该表不存在”,不明白为什么它不是先运行我前面创建表的部分,而是先检验代码有效性。
请问各位大哥,如何改进代码可以解决这个问题,非常感谢!

create or replace procedure P001 is
begin

IF GET_OBJECT_CNT('P0100','TABLE')=0 --如果该表不存在
THEN
---建立一张新表P0100
EXECUTE IMMEDIATE
'
CREATE TABLE P0100
(
PARENTL NVARCHAR2(60) not null,
ENTITYL NVARCHAR2(60) not null,
C2L NVARCHAR2(60) not null,
ACCOUNTL NVARCHAR2(60) not null,
VALUEL NVARCHAR2(60) not null,
DDATA FLOAT
)
tablespace EPM
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
)
';
-- Create Index
EXECUTE IMMEDIATE
'
CREATE INDEX P0100ind00 ON P0100 (PARENTL,EntityL,C2L,ACCOUNTL,VALUEL)
';
ELSIF GET_OBJECT_CNT('P0100','TABLE')=1 --如果该表存在
THEN
EXECUTE IMMEDIATE
'
Truncate TABLE P0100
';
END IF;

--Insert Records
INSERT INTO P0100
SELECT PARENTID,EntityID,Custom2ID,ACCOUNTID,VALUEID,DDATA
FROM P01_fact;
COMMIT;


end P001;
...全文
53 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hezufya 2009-08-25
  • 打赏
  • 举报
回复
可以了,已经,非常感谢您。
bzcnc 2009-08-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hezufya 的回复:]
新问题:
这句话报错,不知道为什么

  EXECUTE IMMEDIATE
  '
  Insert into P0101
  SELECT CONCAT(CONCAT(Parentl,'-'),entityl) entityl,C2L,AccountL,'Elimination' ValueL,SUM(DECODE(Valuel,'[Contribution Total]',DDATA,'[Parent]',-DDATA)) ddata

    FROM P0100
    GROUP BY ParentL,EntityL,C2L,AccountL
  ';

[/Quote]

在动态SQL语句中,原来的单引号使用''来替代,就是两个单引号,注意不是双引号,再尝试一下,估计就可以了
hezufya 2009-08-25
  • 打赏
  • 举报
回复
新问题:
这句话报错,不知道为什么

EXECUTE IMMEDIATE
'
Insert into P0101
SELECT CONCAT(CONCAT(Parentl,'-'),entityl) entityl,C2L,AccountL,'Elimination' ValueL,SUM(DECODE(Valuel,'[Contribution Total]',DDATA,'[Parent]',-DDATA)) ddata

FROM P0100
GROUP BY ParentL,EntityL,C2L,AccountL
';
hezufya 2009-08-25
  • 打赏
  • 举报
回复
谢谢您,我试验已经可以了,但是这样写和普通的写法有什么不同,会不会导致速度降低?
小灰狼W 2009-08-25
  • 打赏
  • 举报
回复
因为你创建表的语句是用EXECUTE IMMEDIATE 实行的
系统不会去检测
你把insert那句也放在EXECUTE IMMEDIATE 后执行就可以了
majy 2009-08-25
  • 打赏
  • 举报
回复
exectue immediate 'insert into p0100 select .....';

17,086

社区成员

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

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