SQL:Oracle:スキーマ、シノニムとは何か?
SQL
2004年08月27日
0 Comment 0 Trackback Permalink
SQL:Oracle:ヒント(ヒント句、ヒントオプション)とは?
SQL
2004年08月25日
SQL文中にコメントとして記述し、実行計画を明示的に指示できる。
SELECT、UPDATE、INSERT、DELETEのいずれかのキーワードの後でのみ指定できる。
(構文)
※コメント符号に”+”を付ける事で、ヒントと認識される
※コメント符号とプラス記号の間の空白入れてはいけない
※プラス記号とヒントの間の空白は、入れても入れなくてもよい
※複数のヒントは、空白で区切る
※ヒント自体が構文エラーでも、コメントとして解釈される為、エラーにならない
(記述例)
※INDEX・・・指定された表の索引(INDEX)を使った実行計画を指示できる
<もっと詳しく知れるサイト>
>SQLチューニング編3-SQL 実行計画解析、EXPLAIN、ヒントオプション
SELECT、UPDATE、INSERT、DELETEのいずれかのキーワードの後でのみ指定できる。
(構文)
/*+ ・・ヒント・・ */
--+ ・・ヒント・・
※コメント符号に”+”を付ける事で、ヒントと認識される
※コメント符号とプラス記号の間の空白入れてはいけない
※プラス記号とヒントの間の空白は、入れても入れなくてもよい
※複数のヒントは、空白で区切る
※ヒント自体が構文エラーでも、コメントとして解釈される為、エラーにならない
(記述例)
SELECT /*+ INDEX(TABLE1) */
COLUMN_A,COLUMN_B
FROM TABLE1
WHERE ・・・・
※INDEX・・・指定された表の索引(INDEX)を使った実行計画を指示できる
<もっと詳しく知れるサイト>
>SQLチューニング編3-SQL 実行計画解析、EXPLAIN、ヒントオプション
Oracle:Update時に、ORA-01779: キー保存されていない表にマップする列は変更できません のエラーが発生
SQL
2004年08月11日
ビューUPDATE文で更新先のレコード1行に更新元のレコードが複数行対応する場合(一意にならない可能性がある場合)発生する。
例
TEST1テーブルのキー項目・・・ID,KEYID
TEST2テーブルのキー項目・・・ID,KEYID1,KEYID2,KEYDATE
上記の場合、a.ID = b.ID AND a.KEYID = b.KEYID AND b.KEYID2 =0だけではTEST2テーブルのレコードは一意にならない為、発生する。
回避策
SELECT項目に 「/*+ BYPASS_UJVC */」を入れることにより、エラーが発生しなくなる。
例(改善)
ただし更新先のレコード1行に更新元のレコードが複数行対応するケースがある場合、
更新先のレコードが複数回更新されてしまう為、使い方に注意が必要
例の場合だと、TEST2テーブルに、「ID=1,KEYID1=1,KEYID2=0,KEYDATE=20040801」
「ID=1,KEYID=1,KEYID2=0,KEYDATE=20040802」のデータがあると、TEST1テーブルのNAMEを2回更新することになる。
例
UPDATE (
SELECT a.NAME
FROM TEST1 a,TEST2 b
WHERE a.ID = b.ID
AND a.KEYID = b.KEYID1
AND b.KEYID2 =0) A
SET A.NAME = 'TEST';
TEST1テーブルのキー項目・・・ID,KEYID
TEST2テーブルのキー項目・・・ID,KEYID1,KEYID2,KEYDATE
上記の場合、a.ID = b.ID AND a.KEYID = b.KEYID AND b.KEYID2 =0だけではTEST2テーブルのレコードは一意にならない為、発生する。
回避策
SELECT項目に 「/*+ BYPASS_UJVC */」を入れることにより、エラーが発生しなくなる。
例(改善)
UPDATE (
SELECT /*+ BYPASS_UJVC */ a.NAME
FROM TEST1 a,TEST2 b
WHERE a.ID = b.ID
AND a.KEYID = b.KEYID1
AND b.KEYID2 =0) A
SET A.NAME = 'TEST';
ただし更新先のレコード1行に更新元のレコードが複数行対応するケースがある場合、
更新先のレコードが複数回更新されてしまう為、使い方に注意が必要
例の場合だと、TEST2テーブルに、「ID=1,KEYID1=1,KEYID2=0,KEYDATE=20040801」
「ID=1,KEYID=1,KEYID2=0,KEYDATE=20040802」のデータがあると、TEST1テーブルのNAMEを2回更新することになる。
Oracle:ODBC経由にてリンクを張る時に、[Microsoft][ODBC Driver Manager]SQL_HANDLE_ENVでのドライバのSQLAllocHandleは失敗しました。のエラーが発生
SQL
2004年08月03日
環境変数のpathにOracleHOME\binを追加していない為、発生。
追加すると、ODBC経由でリンクを張ることができる。
SQLに直接関係ないんですが、当てはまるとこないので、ここに投稿します。
追加すると、ODBC経由でリンクを張ることができる。
SQLに直接関係ないんですが、当てはまるとこないので、ここに投稿します。