FIXME を解決するのを手伝ってくれる人はいますか?
-- Task: Get records with given rowid IN STRING from a table.
-- NOTICE: I do not known where the given rowid comes from.
-- OUTPUT 'AAAAB0AABAAAAOhAAA'
SELECT ROWID FROM DUAL;
-- OK, one record
SELECT * FROM DUAL WHERE ROWID IN ('AAAAB0AABAAAAOhAAA');
-- run with no errors, and no records
SELECT INFO_ID FROM TM_INFO_CATALOG WHERE ROWID IN (SELECT ROWID FROM DUAL);
-- ERROR: ORA-01410 invalid ROWID, WHY ?????????? (This is my sql statement)
SELECT INFO_ID FROM TM_INFO_CATALOG WHERE ROWID IN ('AAAAB0AABAAAAOhAAA'); -- FIXME
-- Question: How to check an rowid is exists in a table?
-- The following is my way:
-- FIRST, I need check whether the given rowid is from the table to query.
-- OK, but, low performance, as using function 'ROWIDTOCHAR()' (I think so.)
SELECT 1 FROM TM_INFO_CATALOG WHERE 'AAAAB0AABAAAAOhAAA' IN (SELECT ROWIDTOCHAR(ROWID) FROM TM_INFO_CATALOG);
-- ERROR: ORA-01410
SELECT 1 FROM TM_INFO_CATALOG WHERE 'AAAAB0AABAAAAOhAAA' IN (SELECT ROWID FROM TM_INFO_CATALOG);
-- THEN, select the record using the exist rowid
-- SELECT * from TM_INFO_CATALOG WHERE ROWID = %theGivenRowIdWhichExistInThisTable%
この点を強調する必要があると思い
ます。行 ID が指定された行 ID と一致する場合、テーブル (TABLE_A など) からレコードを選択するだけです。
指定されたすべての行 ID が (クエリ対象の) TABLE_A に由来する場合、問題ありません。
ただし、1 つの行 ID が他のテーブル (TABLE_B または DUAL など) から取得されている限り、「ORA-01410 無効な ROWID」が発生しました。この問題を修正したい。
誰かが 4 番目の SQL (または同じパターンの別の SQL) を実行して、解決策を教えてください。また、3 番目と 4 番目の SQL ステートメントの違いは、一方が SQLID 型で、もう一方が STRING 型であることを除いて何ですか? 4 番目の SQL の問題を解決するには?