任何人都可以幫我解決FIXME嗎?如何從表(Oracle)中獲取給定rowid列表中的記錄IN STRING?
-- 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%
我想我需要強調點:
我只是想從一個表(如TABLE_A)選擇的記錄,如果rowid給定rowid的匹配。
當所有給定的rowid來自TABLE_A(要查詢)時,那麼它是正確的。
但是,只要給出一個rowid來自其他表(如TABLE_B或DUAL等),則會發生「ORA-01410無效的ROWID」。我想修正這個問題。
我希望有人可以運行第四個SQL(或使用相同模式的其他SQL),然後給我你的解決方案。 而且,第三個和第四個SQL語句除了一個是SQLID類型而另一個是STRING類型之外還有什麼區別?如何解決第四個SQL的問題?
您使用的是哪個版本的Oracle?我沒有在11.2.0.1.0上運行您的代碼時出現任何錯誤。 – 2011-03-05 02:25:03