调用存储过程错误,必须声明标识符 本帖最后由 njpolice001 于 2010-11-01 20:58:05 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 exec test--你的过程名写错了 PROCEDURE test ???sql> exec test; 暴汗啊,太大意了,找了半天错误,不过在toad里运行报错,说无效的SQL语句,不知道是怎么回事啊,SQLPLUS里边运行的很好 BEGIN test; --注意你的过错名!END 你用 begintest;end --试试这样 整个过程在数据抓取的时候没有问题,创建索引报错,这里索引应该怎么弄啊?还有在TOAD里运行过程还是报错 exec 好像是sqlplus命令 创建索引报错,在TOAD里运行过程还是报错。错误信息是什么? toad里运行过程,EXEC TEST 结果:无效的SQL语句SQLPLUS里运行前边抓取没有问题,后面建立索引错误为ora-00905缺失关键字ora-06512在“ddcxd.test”,line 10ora-06512在 line 1然后发现抓取的表正常,先前建立的索引被删除后再次创建失败 1、无效的sql语句 exec是sqlplus里的命令 在toad没有2、你创建索引的拼接语句有问题14 strSQL :='CREATE INDEX DDCXD.IDX_XX_BH ON DDCXD.LOCAL_XX (JJBH)' 15 ||' LOGGING ' 16 ||' TABLESPACE DDCXD' 17 ||' PCTFREE 10' 18 ||' INITRANS 2' 19 ||' MAXTRANS 255' 20 ||' STORAGE (' --上面几行少了空格,建议以后可以将拼接的语句打印出来 一看就知道了 21 ||' INITIAL 64K' 22 ||' MINEXTENTS 1' 23 ||' MAXEXTENTS UNLIMITED' 24 ||' PCTINCREASE 0' 25 ||' BUFFER_POOL DEFAULT' 26 ||' )' 27 ||'NOPARALLEL'; 修改过了,索引都用默认的,代码如下SQL> CREATE INDEX DDCXD.IDX_XX_BH ON DDCXD.LOCAL_XX (BH) 2 /索引已创建。SQL> CREATE OR REPLACE PROCEDURE DDCXD.test AUTHID CURRENT_USER IS 2 tmpVar NUMBER; 3 strSQL varchar2(2000); 4 BEGIN 5 strSQL := 'drop table local_xx'; 6 execute immediate strSQL; 7 strSQL := 'create table local_xx as select * from xt_dba.xx@dblink_xt where rqsj between '|| chr(39) || 20091221 || chr(39) || ' and ' || chr(39) || 20101101235959 || chr(39); 8 execute immediate strSQL; 9 strSQL := 'DROP INDEX DDCXD.IDX_XX_BH'; 10 execute immediate strSQL; 11 strSQL :='CREATE INDEX DDCXD.IDX_XX_BH ON DDCXD.LOCAL_XX (BH)'; 12 execute immediate strSQL; 13 END test; 14 /过程已创建。SQL> EXEC TESTBEGIN TEST; END;*第 1 行出现错误:ORA-01418: 指定的索引不存在ORA-06512: 在 "DDCXD.TEST", line 10ORA-06512: 在 line 1 for c in (select null from user_indexes where index_name='IDX_XX_BH') loop execute immediate 'drop index DDCXD.IDX_XX_BH';end loopstrSQL :='CREATE INDEX DDCXD.IDX_XX_BH ON DDCXD.LOCAL_XX (JJBH)'||chr(10) ||'LOGGING'||chr(10) ||'TABLESPACE DDCXD'||chr(10) ||'PCTFREE 10'||chr(10) ||'INITRANS 2'||chr(10) ||'MAXTRANS 255'||chr(10) ||'STORAGE ('||chr(10) ||' INITIAL 64K'||chr(10) ||' MINEXTENTS 1'||chr(10) ||' MAXEXTENTS UNLIMITED'||chr(10) ||' PCTINCREASE 0'||chr(10) ||' BUFFER_POOL DEFAULT'||chr(10) ||' )'||chr(10) ||'NOPARALLEL';execute immediate strSQL; SQL> exec textBEGIN text; END;你的过程名叫 testexec test sqlplus / as sysdba 的问题 oracle pls-00103错误 求oracle触发器 安装Microsoft loopback adapter的问题 谁能提供个logminer的下载地址啊? 如何在程序中创建Oracle用户? 限制表的记录条数 使用数组作为存储过程\函数的参数的问题 请大家帮忙看一个问题:为什么存储过程执行如此不稳定呢? 请问在ORACLE中NVARCHAR类型如何使用? 游标 怎样才能把这样的sql语句优化呢?(强烈散粉)
sql> exec test;
test; --注意你的过错名!
END
test;
end --试试这样
整个过程在数据抓取的时候没有问题,创建索引报错,这里索引应该怎么弄啊?
还有在TOAD里运行过程还是报错
错误信息是什么?
结果:无效的SQL语句SQLPLUS里运行
前边抓取没有问题,后面建立索引错误为
ora-00905缺失关键字
ora-06512在“ddcxd.test”,line 10
ora-06512在 line 1然后发现抓取的表正常,先前建立的索引被删除后再次创建失败
2、你创建索引的拼接语句有问题
14 strSQL :='CREATE INDEX DDCXD.IDX_XX_BH ON DDCXD.LOCAL_XX (JJBH)'
15 ||' LOGGING '
16 ||' TABLESPACE DDCXD'
17 ||' PCTFREE 10'
18 ||' INITRANS 2'
19 ||' MAXTRANS 255'
20 ||' STORAGE (' --上面几行少了空格,建议以后可以将拼接的语句打印出来 一看就知道了
21 ||' INITIAL 64K'
22 ||' MINEXTENTS 1'
23 ||' MAXEXTENTS UNLIMITED'
24 ||' PCTINCREASE 0'
25 ||' BUFFER_POOL DEFAULT'
26 ||' )'
27 ||'NOPARALLEL';
SQL> CREATE INDEX DDCXD.IDX_XX_BH ON DDCXD.LOCAL_XX (BH)
2 /索引已创建。SQL> CREATE OR REPLACE PROCEDURE DDCXD.test AUTHID CURRENT_USER IS
2 tmpVar NUMBER;
3 strSQL varchar2(2000);
4 BEGIN
5 strSQL := 'drop table local_xx';
6 execute immediate strSQL;
7 strSQL := 'create table local_xx as select * from xt_dba.xx@dblink_xt where rqsj between '|| chr(39) || 20091221 || chr(39) || ' and ' || chr(39) || 20101101235959 || chr(39);
8 execute immediate strSQL;
9 strSQL := 'DROP INDEX DDCXD.IDX_XX_BH';
10 execute immediate strSQL;
11 strSQL :='CREATE INDEX DDCXD.IDX_XX_BH ON DDCXD.LOCAL_XX (BH)';
12 execute immediate strSQL;
13 END test;
14 /过程已创建。SQL> EXEC TEST
BEGIN TEST; END;*
第 1 行出现错误:
ORA-01418: 指定的索引不存在
ORA-06512: 在 "DDCXD.TEST", line 10
ORA-06512: 在 line 1
execute immediate 'drop index DDCXD.IDX_XX_BH';
end loopstrSQL :='CREATE INDEX DDCXD.IDX_XX_BH ON DDCXD.LOCAL_XX (JJBH)'||chr(10)
||'LOGGING'||chr(10)
||'TABLESPACE DDCXD'||chr(10)
||'PCTFREE 10'||chr(10)
||'INITRANS 2'||chr(10)
||'MAXTRANS 255'||chr(10)
||'STORAGE ('||chr(10)
||' INITIAL 64K'||chr(10)
||' MINEXTENTS 1'||chr(10)
||' MAXEXTENTS UNLIMITED'||chr(10)
||' PCTINCREASE 0'||chr(10)
||' BUFFER_POOL DEFAULT'||chr(10)
||' )'||chr(10)
||'NOPARALLEL';
execute immediate strSQL;
SQL> exec text
BEGIN text; END;你的过程名叫 test
exec test