sql >> データベース >  >> RDS >> Oracle

SQLスクリプトがsqldeveloperとsqlplusのどちらで実行されているかをどのように判断できますか?

    私はSQLDeveloperの行サイズのバグに精通していないので、最終結果がどうなるかわかりません。ただし、 sys_contextを使用できます。 このために:

    select sys_context('USERENV', 'MODULE') from dual;
    

    SYS_CONTEXT('USERENV','MODULE')
    --------------------------------------------------------------------------------
    SQL*Plus
    

    ...または:

    SYS_CONTEXT('USERENV','MODULE')                                           
    -------------------------------
    SQL Developer 
    

    だからあなたはあなたが持っているものを次のように適応させることができます:

    column set_the_line new_value targetlinesize noprint
    set termout off
    select case sys_context('USERENV', 'MODULE')
        when 'SQL Developer' then 5 else 500 end as set_the_line from dual;
    set termout on
    set linesize &&targetlinesize
    

    そして、

    でテストします
    show linesize
    

    linesize 500が得られます SQL*Plusおよびlinesize 5の場合 SQLDeveloperで。

    SQL * Plusにまだ接続していない可能性がある場合は、最初に値を定義するだけです。 selectからエラーを隠すために特別なことをする必要はありません。 set termout offを超えて 、ただし、whenever sqlerrorを含めることができます。 login.sqlの場合に備えて は終了するように設定していますが、後でリセットする必要があるかもしれません。

    define targetlinesize=500
    whenever sqlerror continue
    set termout off
    column set_the_line new_value targetlinesize noprint
    select case sys_context('USERENV', 'MODULE')
        when 'SQL Developer' then 5 else 500 end as set_the_line from dual;
    set termout on
    set linesize &&targetlinesize
    show linesize
    

    column 選択が成功した場合、値はそれをオーバーライドし、失敗した場合はタッチしません。それをclient.sqlというファイルに入れると 次のように実行します:

    sqlplus -s /nolog @client
    

    この出力のみが表示されます:

    linesize 500
    

    また、SQL Developerでも同じことが実行され、linesize 5が得られます。 もう一度。



    1. MySQLのLIKEクエリでORを使用して、複数のフィールドを比較する

    2. Laravel5データベースの問題

    3. Flaskの場合-ValueErrorの移行:位置15の接続文字列の補間構文が無効です

    4. MySQL LOAD DATA LOCAL INFILE Python