Tôi muốn tìm khóa ngoài của bảng nhưng có thể có nhiều hơn một người dùng/lược đồ với một bảng có cùng tên. Làm cách nào tôi có thể tìm thấy người dùng hiện đang đăng nhập đang xem? Có chức năng nào cho chủ nhân của nó không? Điều gì sẽ xảy ra nếu có từ đồng nghĩa công khai?Làm thế nào tôi có thể tìm thấy OWNER của một đối tượng trong Oracle?
Trả lời
Bạn có thể truy vấn các ALL_OBJECTS xem:
select owner
, object_name
, object_type
from ALL_OBJECTS
where object_name = 'FOO'
Để tìm từ đồng nghĩa:
select *
from ALL_SYNONYMS
where synonym_name = 'FOO'
Chỉ cần làm rõ, nếu câu lệnh SQL một
dùng
của người dùng tham chiếu một tên đối tượng không có trình độ chuyên môn schema (ví dụ 'FOO'), Oracle FIRST kiểm tra lược đồ của người dùng cho một đối tượng của tên đó (bao gồm các từ đồng nghĩa trong lược đồ của người dùng đó). Nếu Oracle không thể giải quyết tham chiếu từ lược đồ của người dùng, Oracle sẽ kiểm tra từ đồng nghĩa chung.
Nếu bạn đang tìm kiếm đặc biệt cho những hạn chế trên một tên_bảng cụ thể:
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
- phụ lục:
Nếu người dùng của bạn được cấp quyền truy cập vào các quan điểm DBA_ (ví dụ như nếu bạn người dùng đã được cấp SELECT_CATALOG_ROLE), bạn có thể thay thế 'DBA_
' thay cho 'ALL_
' trong các ví dụ SQL trước. Chế độ xem ALL_x
chỉ hiển thị các đối tượng mà bạn đã được cấp đặc quyền. Chế độ xem DBA_x
sẽ hiển thị tất cả các đối tượng cơ sở dữ liệu, cho dù bạn có đặc quyền đối với chúng hay không.
câu hỏi thú vị - Tôi không nghĩ rằng có bất kỳ chức năng Oracle thực hiện điều này (gần giống như một "mà" lệnh trong Unix), nhưng bạn có thể nhận được thứ tự độ phân giải cho tên theo:
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')
Để tìm tên của người dùng hiện tại trong phiên Oracle, hãy sử dụng hàm USER
.
Lưu ý rằng chủ sở hữu của ràng buộc, chủ sở hữu của bảng chứa khóa ngoại, và chủ sở hữu của bảng được tham chiếu có thể khác nhau. Nghe có vẻ như nó ’ là chủ sở hữu bảng bạn ’ lại quan tâm đến, trong trường hợp này nên được gần gũi với những gì bạn muốn:
select Constraint_Name
from All_Constraints
where Table_Name = 'WHICHEVER_TABLE'
and Constraint_Type = 'R' and Owner = User;
quan điểm Oracle như ALL_TABLES và ALL_CONSTRAINTS có một cột chủ sở hữu, mà bạn có thể sử dụng để hạn chế truy vấn của bạn. Ngoài ra còn có các biến thể của các bảng này bắt đầu bằng USER thay vì ALL, chỉ liệt kê các đối tượng có thể được truy cập bởi người dùng hiện tại.
Một trong số these lượt xem sẽ giúp giải quyết vấn đề của bạn. Họ luôn làm việc tốt cho tôi vì những vấn đề tương tự.
Tôi tìm thấy câu hỏi này là kết quả hàng đầu trong khi Googling cách tìm chủ sở hữu bảng trong Oracle, vì vậy tôi nghĩ rằng tôi sẽ đóng góp một câu trả lời cụ thể cho người khác.
Để tìm chủ sở hữu của một bảng cụ thể trong một Oracle DB, sử dụng các truy vấn sau đây:
select owner from ALL_TABLES where TABLE_NAME ='<MY-TABLE-NAME>';
- 1. Làm thế nào tôi có thể tìm thấy trung tâm của đối tượng?
- 2. Làm thế nào tôi có thể thấy những gì có trong heap của tôi trong Java?
- 3. Làm thế nào tôi có thể tìm thấy sự kết hợp của hai truy vấn Django?
- 4. Làm thế nào tôi có thể tìm thấy giao điểm của hai truy vấn Django?
- 5. Làm cách nào tôi có thể thấy chuỗi nguyên mẫu của đối tượng Javascript?
- 6. Làm thế nào tôi có thể nhận được kích thước của một đối tượng trong HttpRuntime.Cache?
- 7. Làm thế nào tôi có thể tìm thấy màu chủ đạo của một hình ảnh?
- 8. Trong mercurial làm thế nào tôi có thể tìm thấy changesets có chứa một chuỗi?
- 9. Django: Làm thế nào tôi có thể tìm thấy mô hình nào của tôi đề cập đến một mô hình
- 10. Làm thế nào tôi có thể tìm thấy số lượng khóa trong một băm trong Perl?
- 11. Làm thế nào tôi có thể tìm thấy đường dẫn đến một bao gồm trong Symfony2?
- 12. Android- làm thế nào tôi có thể chuyển đối tượng android.net.Uri thành đối tượng java.net.URI?
- 13. Làm thế nào tôi có thể khởi tạo một đối tượng chỉ biết tên của nó?
- 14. Làm cách nào tôi có thể thấy các truy vấn được thực hiện đối với Oracle?
- 15. Làm thế nào tôi có thể thêm đối tượng javascript để đối tượng khác trong động
- 16. Làm thế nào tôi có thể thấy những gì capybara được tìm thấy trong một bước dưa chuột thất bại?
- 17. Làm thế nào tôi có thể tìm thấy một cá thể metaobt Qt từ một tên lớp?
- 18. Làm thế nào tôi có thể "tách" một SqlDataReader khỏi đối tượng SqlConnection của nó?
- 19. Làm thế nào tôi có thể tìm ra serialVersionUID của một đối tượng Java được tuần tự hóa?
- 20. Khuôn khổ thực thể - Làm thế nào tôi nên thể hiện đối tượng "Đối tượng" của tôi
- 21. Làm thế nào tôi có thể tìm thấy điểm giao nhau của ba mặt phẳng?
- 22. Làm thế nào tôi có thể tìm thấy plugin VIM nào có lỗi vì quá tải CPU của tôi
- 23. Làm thế nào tôi có thể cast hoặc deserialize SoapObject vào đối tượng của tôi?
- 24. Làm thế nào tôi có thể nhìn thấy đối tượng bên trong đống & ngăn xếp trong C# .Net
- 25. Làm thế nào tôi có thể gán một thuộc tính cho một đối tượng jQuery?
- 26. git tìm nạp "không thể tìm thấy" "đối tượng ... không tìm thấy" lỗi cho stash
- 27. jQuery - làm thế nào tôi có thể tìm thấy nếu một id có một chuỗi cụ thể?
- 28. Làm thế nào tôi có thể vượt qua một tham chiếu đối tượng Scala trong Java?
- 29. Làm thế nào tôi có thể tìm thấy vị trí của một trận đấu regex trong Perl?
- 30. làm thế nào tôi có thể kiểm tra nếu một đối tượng tồn tại trong C++
Chỉ cần để thực hiện các truy vấn linh hoạt hơn một chút, tôi sẽ sẽ truy vấn 'nơi thấp hơn (object_name) =' foo'' Điều này đặc biệt hữu ích khi bạn có tên chức năng, nhưng không phải là viết hoa (ví dụ như từ một cuộc gọi trong một chương trình bên ngoài không phân biệt chữ hoa chữ thường, như trường hợp của bản thân mình). – Travis
@Travis: điều đó sẽ làm cho truy vấn linh hoạt hơn. Để kết hợp chặt chẽ hơn cách Oracle thấy các mã định danh "phân biệt chữ hoa chữ thường" trong câu lệnh SQL, chúng ta muốn ** 'WHERE object_name = UPPER ('foo')' **. (Một định danh không kèm theo trong các dấu ngoặc kép trong một câu lệnh SQL được Oracle xem như là trường hợp trên. (Oracle identifiers * là * case sensitive), chúng ta chỉ cần đặt chúng trong dấu ngoặc kép trong câu lệnh SQL để bảo vệ chữ thường Khi chúng ta thực hiện 'SELECT * FROM foo', Oracle thực sự thấy định danh là' FOO', như thể chúng ta đã thực hiện 'SELECT * FROM FOO'.) – spencer7593