select user from dual
にはどのような変数が返されますか?キャスト変数とoracleでユーザー名を選択する12c
varchar
が表示されない場合は、varchar(30)
またはvarchar2(30)
にキャストするにはどうすればよいですか?
現在のユーザー名よりも優れた方法がありますか?
select user from dual
にはどのような変数が返されますか?キャスト変数とoracleでユーザー名を選択する12c
varchar
が表示されない場合は、varchar(30)
またはvarchar2(30)
にキャストするにはどうすればよいですか?
現在のユーザー名よりも優れた方法がありますか?
によれば:
select dump(user) from dual;
それはタイプ1、which is varchar2
あります。 (またはnvarchar2
、その数だけに基づいています)。長さ(バイト数)はもちろん、のように異なります。 charです。
ドキュメントfor the user
functionも書かれています:
この関数はVARCHAR2値を返します。
あなたはvarchar2(30)
にユーザーをキャストすることができます。
select cast(user as varchar2(30)) from dual;
が、それはその後まったく同じだダンプの方法。ユーザー名が30文字を超えていて初めて始めると違いが見えます。切り捨てられます。ただし、次のようにもなります。
この関数の値は、空白埋め比較セマンティクスと比較されます。
select * from dual where user = 'STACKOVERFLOW'; select * from dual where user = 'STACKOVERFLOW ';
空白埋め比較が、それはリテラルの長さに
user
の結果をパディングだことを意味します。私のユーザー名は、たとえば、その後、STACKOVERFLOW
これらの戻りデータの両方である場合ということを意味
それはと比較されています。
あなたはそれが非空白埋め比較に戻りますと、もはや真である結果にキャストしたら:
select * from dual where cast(user as varchar2(30)) = 'STACKOVERFLOW';
は後列を取得しますが、これはそうではない:
select * from dual where cast(user as varchar2(30)) = 'STACKOVERFLOW ';
代替さを使用するsys_context()
:
select sys_context('USERENV', 'SESSION_USER') from dual;
も返され、varchar2
が返されます。これは
select * from dual where sys_context('USERENV', 'SESSION_USER') = 'STACKOVERFLOW'
ので、再び、非空白埋め比較を使用するには、データを検索しますが、これはそうではない:
select * from dual where sys_context('USERENV', 'SESSION_USER') = 'STACKOVERFLOW '
...または明示的なキャストなし。