Oracle 编写一个数据库函数,如果对象存在,则应显示{1};如果对象在数据库中不存在,则应显示{0}

Oracle 编写一个数据库函数,如果对象存在,则应显示{1};如果对象在数据库中不存在,则应显示{0},oracle,plsql,Oracle,Plsql,请帮我完成这个功能。如果你能校对并纠正我的错误,我将不胜感激 a。该函数接受两个输入参数{object\u name,object\u type},并返回一个INT 对象名称和对象类型的关系如下 b。{object_name}可以是任何数据库对象,如表、序列、同义词、视图 c。{object_type}可以是{T,SEQ,SYN,V}。每个对象类型对应于其对象名称。 T=>表,SYN=>同义词,SEQ=>序列,V=>视图 例如,如果我将object_名称传递为'EMPLOYEES',object

请帮我完成这个功能。如果你能校对并纠正我的错误,我将不胜感激

a。该函数接受两个输入参数{object\u name,object\u type},并返回一个INT

对象名称和对象类型的关系如下

b。{object_name}可以是任何数据库对象,如表、序列、同义词、视图

c。{object_type}可以是{T,SEQ,SYN,V}。每个对象类型对应于其对象名称。 T=>表,SYN=>同义词,SEQ=>序列,V=>视图

例如,如果我将object_名称传递为'EMPLOYEES',object_类型传递为'T',那么它应该检查该对象是否在数据库中,然后返回{1}或{0}

create or replace function OBJECT_CHECK (object_name varchar, 
                        object_type varchar,
                       )
return int 

AS
BEGIN 

DECLARE
v_Number NUMBER;
V_NUMBER1 NUMBER;
v_str VARCHAR2(100);
OBJECTS_NAME VARCHAR2(100):='&object';
v_tab VARCHAR2(100);

BEGIN
SELECT COUNT(* ) --for tables checking
INTO v_Number
FROM User_Tables
WHERE Table_Name = UPPER(OBJECTS_NAME);
v_str :='TABLE_NAME';
IF V_NUMBER =0 THEN -- for synonyms checking
SELECT COUNT(* )
INTO v_Number
FROM user_synonyms
WHERE synonym_Name = UPPER(OBJECTS_NAME);
v_str :='SYNONYM';
END IF;

--dbms_output.put_line(v_number);
v_str:='INDEX';
END IF;
IF V_NUMBER = 0 THEN -- for COLUMN checking
BEGIN
FOR i IN
(SELECT table_name FROM all_tab_cols WHERE column_name =UPPER(OBJECTS_NAME)
)
LOOP
dbms_output.put_line(UPPER(OBJECTS_NAME)|| ' Coulmn available in ' ||        
i.table_name || ' table ');
END LOOP;
v_str:='colum';
END;
END IF;
IF V_NUMBER = 0 THEN 
SELECT count(*)
into v_number FROM all_tab_cols WHERE column_name =UPPER(OBJECTS_NAME);
end if;
IF v_Number >= 1 AND v_str='TABLE_NAME' THEN
dbms_Output.Put_Line(UPPER(OBJECTS_NAME) ||'-----> TABLE IS AVAILABLE IN THE       
SCHEMA ' );
ELSE
dbms_Output.Put_Line(UPPER(OBJECTS_NAME) ||'-----> NO SUCH TABLE AVAILABLE IN    
THE SCHEMA ' );
END IF;
IF v_Number >= 1 AND v_str='SYNONYM' THEN
dbms_Output.Put_Line(UPPER(OBJECTS_NAME) ||'-----> SYNONYM IS AVAILABLE IN THE   
SCHEMA ' );
ELSE
dbms_Output.Put_Line(UPPER(OBJECTS_NAME) ||'-----> NO SUCH SYNONYM AVAILABLE   
IN THE SCHEMA ' );
END IF;
IF v_Number >= 1 AND v_str='INDEX' THEN
dbms_Output.Put_Line(UPPER(OBJECTS_NAME) ||'-----> INDEX IS AVAILABLE IN THE     
SCHEMA ' );
ELSE
dbms_Output.Put_Line(UPPER(OBJECTS_NAME) ||'-----> NO SUCH INDEX AVAILABLE IN   
THE SCHEMA ' );
END IF;
IF v_Number = 0 or V_STR <>'colum' THEN
dbms_Output.Put_Line(UPPER(OBJECTS_NAME) ||'-----> NO SUCH COLUMN AVAILABLE IN   
THE SCHEMA ' );
END IF;


END;

END;

不确定这是否是您所指的问题,但您有一些语法错误。您应该已经收到指向这些的错误消息。然而

这里有一个逗号…删除它

create or replace function OBJECT_CHECK (object_name varchar, 
                        object_type varchar, <--HERE
                       )
return int 

您遇到的具体问题是什么?您不使用sys.all_objects视图的原因是什么?此视图在一个位置包含表、索引、同义词等,而不必在多个位置查看。。。
END;

END;