2015-06-29 62 views
0

默認值當我嘗試,進行驗證,如果列有一個默認值設置,我有一個問題,當我嘗試驗證,如果默認值爲null。如何驗證甲骨文

SELECT a.data_default FROM all_tab_columns a WHERE a.table_name = 'MY_TABLE' and a.column_name = 'COL1' AND a.data_default IS NOT NUL 

它在Long類型中返回NULL。因此,如何驗證默認不爲空,不等於NULL的長型

回答

0

聚結在Oracle和SQL Server支持和提供基本相同的功能,NVL和ISNULL。 (有一些重要的不同之處,coalesce可以接受任意數量的參數,並返回第一個非空值。isnull的返回類型與第一個參數的類型匹配,這對於coalesce來說不是真的,至少在SQL Server上)

+0

對不起,我不知道如何在我的情況下使用COALESCE我嘗試:'SELECT COALESCE(a.data_default,「默認值是空的')FROM all_tab_columns a WHERE a.table_name ='MY_TABLE'和a.column_name ='COL1'AND a.data_default IS NOT NULL'。但我有一個錯誤:_ORA-00932:不一致的數據類型:LONG預期得到CHAR_ – lecogiteur

0

您可以嘗試: SELECT a.data_default FROM all_tab_columns a WHERE a.table_name ='MY_TABLE'and a.column_name ='COL1'AND to_char(a.data_default)IS NOT NULL;

其實Data_default列是長數據類型,所以可能會給出這個錯誤。

+0

沒有這個請求我有一個錯誤:'SQL錯誤[932] [42000]:ORA-00932:類型德最近搜索incohérents; CHAR:CHAR; ORN-00932:donnéesincohérents的類型; CHAR:CHAR; obtenu:LONG ' – lecogiteur

0

問題是類型LONG。解決方法是使用pl/sql。第一部分使用遊標只選擇具有默認值的列,然後在循環中過濾那些已被指定爲「DEFAULT NULL」的列。然後只顯示那些有默認是不爲空,不等於NULL

BEGIN 
FOR rec in 
    (SELECT table_name, column_name, a.data_default 
     FROM all_tab_columns A 
    WHERE a.table_name = 'MY_TABLE' 
    AND a.column_name = 'COL1' 
    AND a.data_default IS NOT NULL) LOOP 
    IF UPPER(rec.data_default) NOT LIKE '%NULL%' THEN 
    DBMS_OUTPUT.PUT_LINE(rec.table_name||' '||rec.column_name||' '||rec.DATA_default);<br> 
    END IF; 
END LOOP; 
END; 
/