LoginSignup
2
1

SymfowareでのSQL問い合わせ時の注意点

Last updated at Posted at 2019-02-22

SymfowareでのSQL問い合わせ時の注意点を自分用メモも兼ねて記載します。基本的にはOracleとの比較になります。

INSERT SELECT

挿入先のテーブルをSELECT句で指定できない(ビューを指定し、ビューから参照されている場合も同様)。
同一テーブル内でのコピーができないので、一旦一時表に入れるとか、JDBC接続等であれば、一旦取得してINSERTかけるしかない。

Oracle.sql
-- Oracleでは可能
INSERT INTO hoge_tbl
    (SELECT hoge_seq.nextval, hoge_col FROM hoge_tbl);

UPDATE FROM

更新時に別テーブルの値を利用することができない。

SQLServer.sql
-- SQLServerでは可能
UPDATE hoge_tbl SET
    hoge_tbl.hoge_col1 = fuga_tbl.fuga_col1
FROM fuga_tbl
WHERE hoge_tbl.key_col = fuga_tbl.key_col;
Oracle.sql
-- Oracleでは副問合せで可能
UPDATE hoge_tbl SET
    (hoge_col1, hoge_col2) =
    (SELECT fuga_col1, fuga_col2
        FROM fuga_tbl
        WHERE hoge_tbl.key_col = fuga_tbl.key_col);

リテラル指定

Symfowareでは日付型をリテラルで指定する際、型名の指定が必要。

Symfoware.sql
SELECT *
FROM hoge_tbl
WHERE date_col = DATE'2000-01-01'
AND timestamp_col = TIMESTAMP'2000-01-01 00:00:00';

システム表

カラム定義情報取得

SELECT rc.*
FROM RDBII_SYSTEM.RDBII_TABLE rt
LEFT OUTER JOIN RDBII_SYSTEM.RDBII_COLUMN rc
ON (rt.DB_CODE = rc.DB_CODE AND rt.SCHEMA_CODE = rc.SCHEMA_CODE AND rt.TABLE_CODE = rc.TABLE_CODE)
WHERE rt.TABLE_NAME = 'hoge_table'

インデックス情報取得

SELECT
    TABLE_NAME
  , INDEX_DSO_NAME
  , rcu.ORDINAL_POSITION
  , rc.COLUMN_NAME
FROM
  RDBII_SYSTEM.RDBII_TABLE rt 
  INNER JOIN RDBII_SYSTEM.RDBII_INDEX ri 
    ON ( 
      rt.DB_CODE = ri.DB_CODE 
      AND rt.SCHEMA_CODE = ri.SCHEMA_CODE 
      AND rt.TABLE_CODE = ri.TABLE_CODE
    )
  INNER JOIN RDBII_SYSTEM.RDBII_COLUMN_USAGE rcu 
    ON ( 
      ri.DB_CODE = rcu.DB_CODE 
      AND ri.SCHEMA_CODE = rcu.OBJ_SCHEMA_CODE 
      AND ri.INDEX_DSO_CODE = rcu.OBJECT_CODE
    )
  INNER JOIN RDBII_SYSTEM.RDBII_COLUMN rc 
    ON ( 
      ri.DB_CODE = rc.DB_CODE 
      AND ri.SCHEMA_CODE = rc.SCHEMA_CODE 
      AND ri.TABLE_CODE = rc.TABLE_CODE
      AND rcu.COLUMN_CODE = rc.COLUMN_CODE
    )
WHERE DB_NAME = 'TEST_DB' AND TABLE_NAME = 'TEST_TBL'
ORDER BY rt.TABLE_NAME, ri.INDEX_DSO_CODE, rcu.ORDINAL_POSITION;
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1