[英]Oracle SQL only drop a column if a table exists
對於 Microsoft SQL 服務器,我有以下語句僅在表存在時刪除一列。
IF EXISTS(SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TEST_TABLE')
ALTER TABLE TEST_TABLE DROP COLUMN LEGACY_VALUE
GO
我想知道 Oracle 中是否存在相關的 IF-EXISTS 機制。
可以使用以下視圖之一訪問有關 Oracle 數據庫中列的所有元數據。
user_tab_cols; -- 對於用戶擁有的所有表
all_tab_cols; -- 對於用戶可以訪問的所有表
dba_tab_cols; -- 對於數據庫中的所有表。
因此,如果您正在尋找一個存在並想要刪除它的列,您的代碼可能看起來像這樣(見下文)。
既然這似乎是一次性的任務,那么努力真的值得嗎?
DECLARE
v_column_exists number := 0;
BEGIN
Select count(*) into v_column_exists
from user_tab_cols
where upper(column_name) = 'LEGACY_VALUE''
and upper(table_name) = 'TEST_TABLE';
--and owner = 'SCOTT --*might be required if you are using all/dba views
if (v_column_exists = 1) then
execute immediate 'alter table test_table drop legacy_value';
end if;
end;
/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.