请帮我完成这个功能。如果你能证明阅读并纠正我的错误,我真的很感激。
一个。该函数接受两个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;
答案 0 :(得分:0)
不确定这是否是您所指的问题,但是您遇到了一些语法错误。您应该收到指向这些的错误消息。然而...
这里有逗号...将其删除
create or replace function OBJECT_CHECK (object_name varchar,
object_type varchar, <--HERE
)
return int
此处还有一个额外的end
END;
END;