NULLには型がありますか?


回答:


8

Oracle:

nullリテラルは型を持つのではなく、

  1. null 任意の型にキャストできます。これは、

    • オーバーロードされたプロシージャまたは関数の呼び出し
    • decode関数の戻り値の型を制御します。例:

      select decode('A','B',to_char(null),'A','1') from dual;
      DECODE('A','B',TO_CHAR(NULL),'A','1')
      -------------------------------------
      1
      
      select decode('A','B',to_number(null),'A','1') from dual;
      DECODE('A','B',TO_NUMBER(NULL),'A','1')
      --------------------------------------- 
                                            1
    • ような集合演算子の列タイプを制御するunion第一の問合せブロックが含まれる場合null
  2. nullデータベースに保存されている値は常に型を持ちます:

    create table t(n integer, s varchar(10));
    insert into t values(null, null);
    
    select decode('A','B',n,'A','1') from t; 
    DECODE('A','B',N,'A','1')
    -------------------------
                            1
    
    select decode('A','B',s,'A','1') from t;
    DECODE('A','B',S,'A','1')
    -------------------------
    1

2
+1好奇心のために、DUALからNULLを選択してwhat_type_is_thisを選択してみましょう。もちろん、これは実用的な有用な例ではなく、まだ試していないので、そのような場合にキャストを使用することを学びました。
bernd_k

6

SQL Server、int

SELECT NULL AS foo INTO dbo.bar
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'bar'
DROP TABLE dbo.bar

MySQL、バイナリ(0)

CREATE TABLE mydb.foo (select NULL AS bar);
EXPLAIN mydb.foo;
DROP TABLE mydb.foo;

+1は非常に興味深い-Oracleの場合と同様にエラーがスローされると想定した
Jack Douglas

4
興味深い発見。ただし、これは、そのような方法でテーブルを作成するときに、これらのDBエンジンがデフォルトでデータ型を使用することを示しています。必ずしもNULLがそれらのエンジンに型を持っているとは限りません。たとえば、このエラーは、SQL Serverが実際にNULLを型なしとして処理することを示唆しています。
ニックチャンマス

2
@Nick select isnumeric(null)= 0 ...興味深い
Factor Mystic

5

Oracleは、ある意味で文字列型です。

それがADO Readerが私に語ったことです。ここにPowershellスクリプトがあります:

[System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient") 
$ConnectionString = "Data Source=myTNS;User ID=myUSER;Password=myPassword" 
$conn=new-object System.Data.OracleClient.OracleConnection 
$conn.ConnectionString=$ConnectionString 
$conn.Open() 
$sql = "Select NULL xx from DUAL"
$cmd=new-object System.Data.OracleClient.OracleCommand($sql,$conn)

$r = $cmd.ExecuteReader()

$r.GetSchemaTable() | % { $_
}        

それは与える

ColumnName               : XX
ColumnOrdinal            : 0
ColumnSize               : 0
NumericPrecision         : 0
NumericScale             : 0
DataType                 : System.String
ProviderType             : 22
IsLong                   : False
AllowDBNull              : True
IsAliased                : 
IsExpression             : 
IsKey                    : 
IsUnique                 : 
BaseSchemaName           : 
BaseTableName            : 
BaseColumnName           : 
ProviderSpecificDataType : System.Data.OracleClient.OracleString

行に注意してください

ProviderSpecificDataType:System.Data.OracleClient.OracleString


3

postgres:

create table foo as select null as bar;
WARNING:  column "bar" has type "unknown"
DETAIL:  Proceeding with relation creation anyway.

postgres=> \d foo

 Column |  Type   | Modifiers
--------+---------+-----------
 bar    | unknown |
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.