请问,我想实现存储过程中表名可以设成变量该怎么做啊?
以下的KF_MT_20040301 必须是"KF_MT_"和当前时间,生成的表名
可以做吗?
=================================
CREATE OR REPLACE PACKAGE BODY MsMsgPack2 AS
PROCEDURE SelectMsProduct2
(
m_da IN KF_MT_20040301.da%TYPE,
m_scts IN KF_MT_20040301.scts%TYPE,
themsg OUT tmsg,
thescts OUT tscts
) IS
cursor cur is SELECT * from KF_MT_20040301
WHERE da = m_da ;
icount number default 1;
begin
for c in cur loop
themsg(icount):=c.msg;
thescts(icount):=c.scts;
icount:=icount+1;
end loop;
END SelectMsProduct2;
END MsMsgPack2;
问题点数:0、回复次数:7Top
1 楼welyngj(无爱)回复于 2004-05-02 15:48:28 得分 0
不动你的意思!
可以用execute immediate ' ' 动态sqlTop
2 楼ern(与Oracle斗,其乐无穷)回复于 2004-05-02 16:01:59 得分 0
对游标恐怕不行,是用动态表名只能用
...
test:='select * from '||表名的变量;
用execute immediate ...来调用Top
3 楼kaka1978(咖咖1978)回复于 2004-05-02 17:16:19 得分 0
我只想把所有出现KF_MT_20040301的地方以变量来代替,可以吗?Top
4 楼kaka1978(咖咖1978)回复于 2004-05-02 17:38:28 得分 0
关键是涉及到游标该如何处理呢?
m_da IN KF_MT_20040301.da%TYPE
cursor cur is SELECT * from KF_MT_20040301
WHERE da = m_da ;
这两种的改写都有困难呀Top
5 楼atao245993(阿涛)回复于 2004-05-03 13:41:56 得分 0
KF_MT_后随日期,应该这些表是同类表。所以%TYPE应该没什么大问题。
在CURSOR声明中是否可以使用变量?好象编译都没法通过。
是否做个临时表,过程中提取数据记录,然后再对临时表中内容处理?可以去掉游标。
在过程内部使用变量表名和动态SQL就没问题了
Top
6 楼hyxyliuyan(不见不散)回复于 2004-05-03 23:04:27 得分 0
关注ing!我也遇到了这样的问题。Top
7 楼zhanghuazhanghome(517(张))回复于 2004-05-04 10:52:28 得分 0
同意atao245993(阿涛)的说法,应该可以的Top




