import java.util.*;
public class Parenthesis
{
public static void main(String...okok)
{
Scanner sc= new Scanner(System.in);
String str=sc.next();
System.out.println(isValid(str));
}
public static int isValid(String a) {
if(a.length()%2!=0)
{
return 0;
}
else if(a.length()==0)
{
return 1;
}
else
{
char c[]=a.toCharArray();
Stack<Character> stk = new Stack<Character>();
for(int i=0;i<c.length;i++)
{
if(c[i]=='(' || c[i]=='[' || c[i]=='{')
{
stk.push(c[i]);
}
else
{
if(stk.isEmpty())
{
return 0;
//break;
}
else
{
char cc=c[i];
if(cc==')' && stk.peek()=='(' )
{
stk.pop();
}
else if(cc==']' && stk.peek()=='[' )
{
stk.pop();
}
else if(cc=='}' && stk.peek()=='{' )
{
stk.pop();
}
}
}
}
if(stk.isEmpty())
{
return 1;
}else
{
return 0;
}
}
}
}
Вы можете запросить представление ALL_OBJECTS:
select owner
, object_name
, object_type
from ALL_OBJECTS
where object_name = 'FOO'
Чтобы найти синонимы:
select *
from ALL_SYNONYMS
where synonym_name = 'FOO'
Просто чтобы уточнить, ссылается ли оператор SQL пользователя пользователя на имя объекта без схемы квалификации (например, «FOO»), Oracle FIRST проверяет схему пользователя на предмет объекта с таким именем (включая синонимы в схеме этого пользователя). Если Oracle не может разрешить ссылку из пользовательской схемы, Oracle затем проверяет наличие общедоступного синонима.
Если вы ищете конкретно ограничения для конкретного table_name:
select c.*
from all_constraints c
where c.table_name = 'FOO'
union all
select cs.*
from all_constraints cs
join all_synonyms s
on (s.table_name = cs.table_name
and s.table_owner = cs.owner
and s.synonym_name = 'FOO'
)
HTH
- добавление:
Если вашему пользователю предоставлен доступ к представлениям DBA_ (например, если вашему пользователю предоставлен SELECT_CATALOG_ROLE), вы можете заменить ' DBA_
»на« ALL_
»в предыдущих примерах SQL. . В представлениях ALL_x
отображаются только объекты, которым предоставлены права. В представлениях DBA_x
будут показаны все объекты базы данных, независимо от того, есть ли у вас на них права или нет.
Интересный вопрос - я не думаю, что есть какая-либо функция Oracle это делает это (почти как команда "which" в Unix), но вы можете получить порядок разрешения имени следующим образом:
select * from
(
select object_name objname, object_type, 'my object' details, 1 resolveOrder
from user_objects
where object_type not like 'SYNONYM'
union all
select synonym_name obj , 'my synonym', table_owner||'.'||table_name, 2 resolveOrder
from user_synonyms
union all
select synonym_name obj , 'public synonym', table_owner||'.'||table_name, 3 resolveOrder
from all_synonyms where owner = 'PUBLIC'
)
where objname like upper('&objOfInterest')
Чтобы найти имя текущего пользователя в сеансе Oracle, используйте функцию ПОЛЬЗОВАТЕЛЬ
.
Обратите внимание, что владелец ограничения, владелец таблицы содержащий внешний ключ, и владелец указанной таблицы может быть другим. Похоже, вас интересует владелец таблицы, и в этом случае он должен быть близок к тому, что вы хотите:
select Constraint_Name
from All_Constraints
where Table_Name = 'WHICHEVER_TABLE'
and Constraint_Type = 'R' and Owner = User;
Представления Oracle, такие как ALL_TABLES и ALL_CONSTRAINTS, имеют столбец владельца, который можно использовать для ограничения запроса. Существуют также варианты этих таблиц, начинающиеся с USER вместо ALL, в которых перечислены только объекты, к которым может получить доступ текущий пользователь.
Одно из этих представлений должно помочь решить вашу проблему. У меня они всегда отлично справлялись с подобными проблемами.