【发布时间】:2016-02-18 08:06:03
【问题描述】:
在 Oracle 中,我正在尝试创建用于删除任何命名对象(如果存在)的过程。我想执行这个查询,select * from dba_objects where owner = 'TEST'。但是当我创建程序时出现错误:-
create or replace PROCEDURE DROPDATABASEOBJECT11(ObjName varchar2,ObjType varchar2,schemaName varchar2)
-----PROCEDURE FOR DROP ALL DATABASE OBJECTS-----
IS
v_counter number := 0;
begin
if ObjType = 'TABLE' then
select count(*) into v_counter select * from dba_objects where object_name = upper(ObjName);
if v_counter > 0 then
execute immediate 'drop table ' || ObjName || ' cascade constraints';
end if;
end if;
end;
我收到错误:-
Error(8,5): PL/SQL: SQL Statement ignored
Error(8,41): PL/SQL: ORA-00942: table or view does not exist
那么如何在程序中使用该查询?
【问题讨论】:
-
drop语句是由哪个用户执行的?我敢打赌它不是 TEST 用户。您必须在 drop 语句中包含对象的架构。
-
用架构名称限定对象名称。
-
select count(*) into v_counter select * from dba_objects where object_name = upper(ObjName) and owner = 'TEST';
-
我也尝试过使用上述查询,但我得到了同样的错误。
-
@shree 运行您显示的内容将得到 ORA-00923,因为中间有额外的
select *,而不是 ORA-00942。