2009-09-02 19 views
0

在試圖回答我碰到這個金塊就這個問題我自己,最終經過加「甲骨文」我的查詢詞:如何使用標準SQL提取視圖的定義?

select DBMS_METADATA.GET_DDL('TABLE','<table_name>') from DUAL; 

其中一期工程,但不便於攜帶。我如何在MySQL上做同樣的事情? SQLite的?其他?

回答

1

由於數據庫元數據不是標準化的,因此沒有標準的方法來做到這一點。

+0

這很不幸,我應該意識到如果在oracle中有這樣一個函數來處理它,那是因爲一個標準不存在。謝謝! –

+0

不幸,但不完全正確 - 請參閱我的答案。 –

2

那麼,有IS ANSI標準稱爲INFORMATION_SCHEMA。許多供應商包括Microsoft(SQL Server),Oracle,MySQL,Postgres都支持它,所以這可能是第一步。

欲瞭解更多信息,請參閱此article here

至於景色,還有那三個INFORMATION_SCHEMA的意見:

  • INFORMATION_SCHEMA.VIEWS
  • INFORMATION_SCHEMA.VIEW_COLUMN_USAGE
  • INFORMATION_SCHEMA.VIEW_TABLE_USAGE

有一個名爲 「VIEW_DEFINITION」 列在「INFORMATION_SCHEMA.VIEWS」視圖中,這樣可能會以某種穩定的方式爲您提供所需的信息。

馬克

+0

SQLite支持INFORMATION_SCHEMA之類的東西。您,用戶,使用名稱INFORMATION_SCHEMA_TABLES定義額外視圖,這不完全是「標準」。這篇文章對支持程度有不同的看法:http://www.petefreitag.com/item/666.cfm –

2

對於SQL Server INFORMATION_SCHEMA.VIEWS限制輸出長度爲4000個字符,這對我來說使得它非常不可靠。

以下工作與定義爲nvarchar(最大)要好得多,適用於多個對象類型(VIEW,SQL_STORED_PROCEDURE,SQL_SCALAR_FUNCTION,SQL_INLINE_TABLE_VALUED_FUNCTION,SQL_TABLE_VALUED_FUNCTION,甚至更多,這是我看到在我的DB)

SELECT TOP 1000 
    O.name 
    , O.type 
    , O.type_desc 
    , M.definition 
FROM sys.Sql_modules AS M 
    LEFT OUTER JOIN sys.objects AS O ON M.object_id=O.object_id 
+0

+1老兄,我希望我能給你+1000分。如果可以的話,我會把他們從我的代表中拿出來! – Icarus

相關問題