rink_rewさんの投稿一覧

助け合いフォーラムの投稿
2025/12/23 返信
主キー列 DROP の可否と解説の整合性について確認したいです

実際に試してみるとわかりますが、エラーにならずに削除できます。

SQL> CREATE TABLE parent
  2  (
  3   id NUMBER(2) CONSTRAINT pid_pk PRIMARY KEY,
  4   dept_name VARCHAR2(10)
  5  );

表が作成されました。

SQL> CREATE TABLE child
  2  (
  3   id NUMBER(2) CONSTRAINT cid_pk PRIMARY KEY,
  4   name VARCHAR2(10) CONSTRAINT cname_uq UNIQUE,
  5   deptid NUMBER(2) CONSTRAINT dept_fk REFERENCES parent (id) ON DELETE CASCADE
  6  );

表が作成されました。

SQL> INSERT INTO parent VALUES (1, 'parent');

1行が作成されました。

SQL> INSERT INTO child VALUES (10, 'child', 1);

1行が作成されました。

SQL> ALTER TABLE child DROP (id);

表が変更されました。

SQL> desc child
 名前                                    NULL?    型
 ----------------------------------------- -------- ----------------------------
 NAME						    VARCHAR2(10)
 DEPTID 					    NUMBER(2)

SQL> 

こういうことですかね。
https://docs.oracle.com/cd/E96517_01/sqlrf/ALTER-TABLE.html?utm_source=chatgpt.com#GUID-552E7373-BF93-477D-9DA3-B2C9386F2877__I2057060

たとえば、列pkを他の表から参照する参照制約が他に存在しない場合は、次の文を指定するときにCASCADE CONSTRAINTS句がなくてもエラーにはなりません。
2025/12/17 返信
表別名が必要なのでは...

この設問においては、問題文のように別名なしでも結果は同じになると思いますが、実務上は特に可読性の観点からも必ず別名つけますよね(JOINするような場合ならもちろん)。
手持ちの試験対策系テキストを少し見て見ましたが、インラインビューの解説の中で別名を使っていないSQLも掲載されているようでした。FROM句に指定する副問合せの説明としては問題なさそうです。

2025/12/09 返信
型の変換について

ちょうど類似の投稿があったので私も調べて見たのですが、本問題でも説明されているように、COALESCE関数ではすべての引数は同じデータ型でなければならず、実行例のとおりエラーになります。
https://mondai.ping-t.com/g/posts/2173

ちなみに黒本(オラクルマスター教科書)などの記載も同様で「引数は同じデータ型である必要がある」という記載になってますね。

2025/12/08 返信
COALESCE関数は暗黙的な変換可能であればできるはず。

Oracleデータベースとしては様々な場面で暗黙的なデータ型変換をしてくれますが、本問題の「参考」に示されているように、COALESCE関数では、すべての引数は同じデータ型でなければならないため、異なるデータ型の値を指定すると基本的にエラーとなります。

SQL> desc test_coalesce01 
 名前                                    NULL?    型
 ----------------------------------------- -------- ----------------------------
 COL1						    NUMBER
 COL2						    VARCHAR2(20)

SQL> SELECT * FROM test_coalesce01;

      COL1 COL2
---------- --------------------
	10 100

SQL> SELECT COALESCE(col1, col2) FROM test_coalesce01;
SELECT COALESCE(col1, col2) FROM test_coalesce01
                      *
行1でエラーが発生しました。:
ORA-00932: データ型が一致しません: NUMBERが予想されましたがCHARです。

もちろん、明示的に変換すればエラーにはなりません。

SQL> SELECT COALESCE(to_char(col1), col2) FROM test_coalesce01;

COALESCE(TO_CHAR(COL1),COL2)
----------------------------------------
10

SQL> SELECT COALESCE(col1, to_number(col2)) FROM test_coalesce01;

COALESCE(COL1,TO_NUMBER(COL2))
------------------------------
			    10

SQL> 

公式マニュアルに記載の文章については、文字->数値や日付->文字のような、よく言う暗黙的データ変換ではなく、同じ数値<->数値や日付<->日付での処理を指しているようです。

DATE型とTIMESTAMP型で試して見たら、型は異なりますがエラーにならずに結果が返されました。

SQL> desc test_coalesce_conv01
 名前                                    NULL?    型
 ----------------------------------------- -------- ----------------------------
 COL1						    TIMESTAMP(6)
 COL2						    DATE

SQL> SELECT * FROM test_coalesce_conv01;

COL1
---------------------------------------------------------------------------
COL2
--------
25-12-08 05:59:08.325928
25-01-01


SQL> SELECT COALESCE(col1, col2) FROM test_coalesce_conv01;

COALESCE(COL1,COL2)
---------------------------------------------------------------------------
25-12-08 05:59:08.325928

SQL> 
2025/09/03 返信
判別基準についてのイメージ

「LED」は、辞書で引こうとすると
「LE」よりは後ろになる。
※広辞苑でいえば、「愛(あい)」よりも「間(あいだ)」の方が後ろになるイメージ。

同じ理論で「LAN」は「LE」よりは前になる。
※広辞苑でいうところの、「間(あいだ)」が「赤(あか)」より前になるイメージ。

「HI~」については、「LE」よりも前。
※そもそも頭文字が「L」より前な「H」なので、
辞書で引いたら圧倒的に早く出てくるといった具合。

そうですね。その理解で良いと思います。

合格体験記の投稿
投稿がありません