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

时间:2016-06-13 20:35:19

标签: oracle plsql

请帮我完成这个功能。如果你能证明阅读并纠正我的错误,我真的很感激。

一个。该函数接受两个INPUT参数{object_name,object_type}并返回INT。

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

湾{object_name}可以是任何数据库对象,如TABLES,SEQUENCES,SYNONYMS,VIEWS。

℃。 {object_type}可以是{T,SEQ,SYN,V}。每个对象类型对应于其对象名称。 T => TABLES,SYN => SYNONYMS,SEQ => SEQUENCES,V => VIEWS。

例如,如果我将object_name传递为'EMPLOYEES',将object_type传递为'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;

1 个答案:

答案 0 :(得分:0)

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

这里有逗号...将其删除

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

此处还有一个额外的end

END;

END;