[前][次][番号順一覧][スレッド一覧]

mysql:16218

From: HIRATSUKA Sadao <HIRATSUKA Sadao <sh2@xxxxxxxxxx>>
Date: Wed, 4 Mar 2015 07:15:55 +0900
Subject: [mysql 16218] Re: MySQLでinvalid object確認する方法

こんにちは、平塚と言います。

2015年3月2日 10:40  <kiro0318@xxxxxxxxxx>:

> MySQLでoracleのようにinvalid objectを確認する方法はありますか?

>

>

>

効率的に確認する方法は、ないと思います。

■プロシージャの場合

(1) プロシージャを定義して実行

DROP PROCEDURE IF EXISTS test_invalid;
DELIMITER //
CREATE PROCEDURE test_invalid() DETERMINISTIC
BEGIN
  SELECT ename FROM emp WHERE empno = 7788;
END
//
DELIMITER ;

CALL test_invalid();

+-------+
| ename |

+-------+
| scott |

+-------+

(2) テーブル名を変更

ALTER TABLE emp RENAME emp_renamed;

(3) プロシージャを実行するとエラー

CALL test_invalid();
ERROR 1146 (42S02): Table 'scott.emp' doesn't exist


■ビューの場合

(1) ビューを定義して参照

CREATE VIEW emp_view AS SELECT * FROM emp;
SELECT * FROM emp_view;

(SELECT結果は省略)

(2) テーブル名を変更

ALTER TABLE emp RENAME emp_renamed;

(3) ビューを参照するとエラー

SELECT * FROM emp_view;
ERROR 1356 (HY000): View 'scott.emp_view' references invalid table(s) or
column(s) or function(s) or definer/invoker of view lack rights to use them

==

Oracle DatabaseではDBA/ALL/USER_OBJECTSでINVALID列を確認することにより
(2)と(3)の間で事前にチェックをかけることができます。

MySQLでは私の把握する限りそのような仕組みはないです。
プロシージャでしたら動作確認する、ビューでしたらSELECT文を実行してみる
必要があると思います。

添付ファイル

[前][次][番号順一覧][スレッド一覧]

   @ 16216 2015-03-02 10:40 [ <kiro0318@xxxxxxxxx] MySQLでinvalid object確認する方法       
-> @ 16218 2015-03-04 07:15 ┗[HIRATSUKA Sadao <sh2]