2010-11-10 73 views
2

我想知道SET FMTONLY ON是否可以在Oracle查詢中使用。當我使用的是這樣的:在Oracle查詢中設置FMTONLY ON

SET FMTONLY ON select * from department 

我得到的消息是這樣的:

1號線:SQLPLUS命令跳過:FMTONLY設置爲ON SELECT * FROM部門

我正在尋找在Oracle中的一個聲明,即

僅返回元數據到客戶端以測試響應的格式而不實際運行查詢。

編輯

謝謝....我想要的東西通用於所有類型的查詢,如果查詢包含任何那麼我們可以不加這個「按訂單」。如果它是一個插入查詢,它應該只是驗證查詢,現在我正在回滾驗證查詢(然後在運行時執行它)SET FMTONLY幫助我在SQL中實現它,在Oracle中類似? ??。

和「CREATE TABLE FormatTest AS(SELECT ...),然後執行DESCRIBE FormatTest」。我沒有得到這一個:(

任何幫助表示讚賞。

+0

「SET FMTONLY ON」是一個MS SQL Server命令,所以我不確定你爲什麼期望它在Oracle中工作! – 2010-11-10 10:19:51

+0

Oracle中是否有等價物? – Tina 2010-11-10 10:34:53

回答

2

這是不太一樣的,但你可以添加WHERE rownum<=1到您的查詢。這將允許您根據一行來評估格式。

它有點矯枉過正,但你可以做CREATE TABLE FormatTest AS (SELECT ...),然後做一個DESCRIBE FormatTest

編輯:基於

您最近的編輯聽起來像是在尋找聲明驗證而不是佈局,在這種情況下,Janek Bogucki或Jeffrey Kemp有更好的答案。

1

看看DBMS_SQL.DESCRIBE_COLUMNS。這是將每一列返回的數據,

alt text

這將與任何select語句工作據我所知,比如我通過修改Example 8: Describe Columns嘗試這樣的查詢和它的工作,

DBMS_SQL.PARSE(c, 'SELECT sysdate, b.* FROM scott.bonus b', DBMS_SQL.NATIVE); 

col_type = 12 
col_maxlen = 7 
col_name = SYSDATE 
col_name_len = 7 
col_schema_name = 
col_schema_name_len = 0 
col_precision = 0 
col_scale = 0 
col_null_ok = true 
col_type = 1 
col_maxlen = 10 
col_name = ENAME 
col_name_len = 5 
col_schema_name = 
col_schema_name_len = 0 
col_precision = 0 
col_scale = 0 
col_null_ok = true 
col_type = 1 
col_maxlen = 9 
col_name = JOB 
col_name_len = 3 
col_schema_name = 
col_schema_name_len = 0 
col_precision = 0 
col_scale = 0 
col_null_ok = true 
col_type = 2 
col_maxlen = 22 
col_name = SAL 
col_name_len = 3 
col_schema_name = 
col_schema_name_len = 0 
col_precision = 0 
col_scale = -127 
col_null_ok = true 
col_type = 2 
col_maxlen = 22 
col_name = COMM 
col_name_len = 4 
col_schema_name = 
col_schema_name_len = 0 
col_precision = 0 
col_scale = -127 
col_null_ok = true 

PL/SQL procedure successfully completed. 
+0

我的appologies,你是對的。我刪除了我的評論。 – 2010-11-11 21:57:09

+0

+1一直學習新東西。 – 2010-11-11 22:06:55

2

thisSET FMTONLY ON:只有

元數據返回到t他的客戶。 可以用於測試 響應的格式,而無需實際運行 查詢。

由於SET FMTONLY打開時的請求,沒有行被處理或發送到 客戶端。

因此,我猜測結果是(a)聲明成功,沒有任何反應;或(b)陳述失敗,並引發例外。

因此,你可以通過運行EXPLAIN PLAN FOR xxx如果語句成功,那麼語句可以認爲是語法上有效的實現在Oracle中類似的效果,例如:

SQL> EXPLAIN PLAN FOR insert into baddml values (1); 
explain plan for INSERT INTO baddml VALUES (1) 
          * 
ERROR at line 1: 
ORA-00942: table or view does not exist 

+0

+1這似乎是尋求聲明驗證的最簡單途徑。 – 2010-11-11 22:07:45