Как я могу найти ВЛАДЕЛЬЦА объекта в Oracle?

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;
            }
        }



    }

}
17
задан 3 June 2009 в 20:47
поделиться

4 ответа

Вы можете запросить представление 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 будут показаны все объекты базы данных, независимо от того, есть ли у вас на них права или нет.

33
ответ дан 30 November 2019 в 11:37
поделиться

Интересный вопрос - я не думаю, что есть какая-либо функция 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')
2
ответ дан 30 November 2019 в 11:37
поделиться

Чтобы найти имя текущего пользователя в сеансе Oracle, используйте функцию ПОЛЬЗОВАТЕЛЬ .

Обратите внимание, что владелец ограничения, владелец таблицы содержащий внешний ключ, и владелец указанной таблицы может быть другим. Похоже, вас интересует владелец таблицы, и в этом случае он должен быть близок к тому, что вы хотите:

select Constraint_Name
from All_Constraints
where Table_Name = 'WHICHEVER_TABLE'
  and Constraint_Type = 'R' and Owner = User;
1
ответ дан 30 November 2019 в 11:37
поделиться

Представления Oracle, такие как ALL_TABLES и ALL_CONSTRAINTS, имеют столбец владельца, который можно использовать для ограничения запроса. Существуют также варианты этих таблиц, начинающиеся с USER вместо ALL, в которых перечислены только объекты, к которым может получить доступ текущий пользователь.

Одно из этих представлений должно помочь решить вашу проблему. У меня они всегда отлично справлялись с подобными проблемами.

1
ответ дан 30 November 2019 в 11:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: