簡體   English   中英

Oracle SQL 僅在表存在時刪除列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM