Vì bạn đang sử dụng từ khóa replace
không cần kiểm tra xem từ đồng nghĩa có tồn tại trước hay không. Bạn sẽ ghi đè lên bất kỳ từ đồng nghĩa nào tồn tại với tên trước đó.
Lý do duy nhất để cảnh giác khi sử dụng replace
là nếu bạn có thể có một từ đồng nghĩa khác có cùng tên. Nếu cơ sở dữ liệu của bạn được tổ chức tốt thì điều này sẽ không xảy ra. Bạn nên luôn luôn biết tất cả các đối tượng của bạn là gì và nơi mà các từ đồng nghĩa trỏ đến.
Tuy nhiên, nếu bạn muốn có một vài lựa chọn:
- Di
replace
. Tuyên bố sẽ ném một lỗi nếu từ đồng nghĩa đã tồn tại và sẽ không bị ghi đè.
Truy vấn từ điển dữ liệu, vì bạn đang ở nhiều sơ đồ all_synonyms
có vẻ giống như đặt cược tốt nhất.
select *
from all_synonyms
where owner = 'ETKS_PR_RW'
and synonym_name = 'SQ_CLDOS_ATCHMNT_ID';
Nếu bạn muốn kết hợp chúng thành một khối duy nhất sau đó bạn có thể làm một cái gì đó như thế này:
declare
l_exists number;
begin
-- check whether the synonym exists
select 1
into l_exists
from all_synonyms
where owner = 'ETKS_PR_RW'
and synonym_name = 'SQ_CLDOS_ATCHMNT_ID';
-- an error gets raise if it doesn-t.
exception when no_data_found then
-- DDL has to be done inside execute immediate in a block.
execute immediate 'CREATE OR REPLACE SYNONYM ETKS_PR_RW.SQ_CLDOS_ATCHMNT_ID
FOR CLDOS_ONLINE_DBA.SQ_CLDOS_ATCHMNT_ID';
end;
/
Trên một hơi tách không xin đừng quote tên đối tượng của bạn. Oracle có thể có các đối tượng có vỏ, nhưng nó rất, rất hiếm khi đáng giá. Tất cả các đối tượng sẽ được tự động đặt ở trên để bạn không cần "
.
bạn có thể cho tôi biết cú pháp cho tùy chọn 2. Đây là điều tôi đang tìm kiếm hay không. –
ở đây một ví dụ hướng dẫn http://snipplr.com/view/39190/create-synonyms/ chắc chắn đây là những gì bạn muốn tôi hy vọng cho tôi chấp nhận câu trả lời thankx trước – shareef
hay bro này phức tạp hơn và những gì tôi nghĩ rằng nó sẽ sao chép tất cả các đối tượng. –