ラベル Oracle の投稿を表示しています。 すべての投稿を表示
ラベル Oracle の投稿を表示しています。 すべての投稿を表示

2013年11月22日金曜日

tnsname.ora設定無しでsqlplus

Oracleを使っている時の不満の一つがtnsname.ora。
ODBCで接続する場合ですら管理者権限が必要なtnsname.oraにHost名などを記述する必要がある。

例えばこんなぐらいに定義が必要です。
POD =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = PODS.GATE.COM)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = ODS)
    )
  )
sqlplusからこれを使って接続する場合は
sqlplus user/password@pod
で接続出来ます。

で、問題はtnsname.oraを編集したく無い場合。Windowsでは
  • Oracle 8i, 9i
    sqlplus user/password@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=PODS.GATE.COM)(PORT=1521)))(CONNECT_DATA=(SID=ODS)))
        
  • Oracle 10g(R2?)以降
    sqlplus USER/PASSWORD@//PODS.GATE.COM:1521/ODS
あ〜、すっきりした。

参照:Ask Tom "How to connect SQLPlus without tnsnames.ora"

2010年6月6日日曜日

OracleでGroup By時にCSV形式で文字連結

 OracleでGroup Byした際、文字列もカンマ区切りで一行に入れて返す方法を見つけました。
ユーザー定義関数を作ったり面倒そうなのは嫌なのでSQLだけで出来る単純な方法です。

結果
GROUP_KEY  STRING
---------- ----------------------------------
Group 1    a
Group 2    a,b
Group 3    a,b,c
Group 4    a,b
Group 5    a,b,d,e
Group 8    a,b

コード
SELECT
  GROUP_KEY ,
  LTRIM
    ( EXTRACT
      ( XMLAGG
        ( XMLELEMENT( "V", ',' || VAL )
        ORDER BY VAL
      ),
      '/V/text()'
    ) ,
    ','
  ) AS STRING
FROM
  ( SELECT DISTINCT
      GROUP_KEY, VAL        -- PRODUCES DISTINCT VALUES
    FROM   T
    WHERE  VAL IS NOT NULL  -- FILTERS OUR NULL VALUES
  ) TB
GROUP BY
  GROUP_KEY

データ
GROUP_KEY  VAL
---------- ----------
Group 1    a
Group 2    a
Group 2    b
Group 3    a
Group 3    b
Group 3    c
Group 4    a
Group 4    a
Group 4    b
Group 4    b
Group 5    a
Group 5    b
Group 5    d
Group 5    e
Group 5    (null)
Group 6    (null)
Group 7    (null)
Group 7    (null)
Group 8    a
Group 8    a
Group 8    b
Group 8    b
Group 8    (null)
Group 8    (null)

参考にしたのは以下のサイトです。
http://www.sqlsnippets.com/en/topic-11785.html