请教动态创建视图的问题

[复制链接]
查看11 | 回复4 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
由于一个视图的数据量太大,想通过创建动态视图的办法来分成若干个数据量小些的视图,写了个包如下:
CREATE OR REPLACE PACKAGE BODY SP_DLKC
IS
PROCEDURE SP_DLKC
(P_DWBM VARCHAR2,
P_DLBM VARCHAR2,
C OUT CUR)
AS
V_VIEWNAMEVARCHAR2(300);
BEGIN
V_VIEWNAME:='CREATE OR REPLACE VIEW PEDIS20WZ.GDWZ_KC_'||P_DLBM||' AS SELECT WZBM,WZMC, XHGG,CZZZ,QCTH,JLDW FROM dwzbm_v WHERE substr(wzbm,1,2)='''||P_DLBM||'''';
execute immediate V_VIEWNAME;
V_VIEWNAME:='CREATE OR REPLACE VIEW PEDIS20WZ.GDWZ_KC AS SELECT A.WZBM AS 物资编码, B.WZMC AS 物资名称, B.XHGG AS 型号规格, '||
'B.CZZZ AS 材质机型, B.QCTH AS 器材图号, B.JLDW AS 计量单位,A.DJ AS 单价 '||
'FROM GDWZ329_KC1 A,GDWZ_KC_'||P_DLBM||' B WHERE A.TBDWBM='''||P_DWBM||''' AND A.WZBM like '''||P_DLBM||'%'' AND A.WZBM=B.WZBM';
execute immediate V_VIEWNAME;
OPEN C FOR
SELECT * FROM GDWZ_KC ;
END SP_DLKC;
END;
在TEST时到第二个execute immediate 时报权限不足,怎么回事?
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
是不是没有读取这辆各表的权限:GDWZ329_KC1 A,GDWZ_KC_'||P_DLBM||'
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
有,它们是在一个库中,不存在跨库访问
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
你可以将第二个语句用变量先取代,然后在SQLPLUS中执行,看是否有 问题。
如果也是一样的问题,说明的权限分配要看一下了。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 mark_liao 发布
[B]你可以将第二个语句用变量先取代,然后在SQLPLUS中执行,看是否有 问题。
如果也是一样的问题,说明的权限分配要看一下了。 [/B]

这样:把CREATE OR 。。。改为:
DECLARE
测试一下在SQLLPUS是否可行,OK后再改为CREATE!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行