Я пытаюсь ознакомиться с базой данных O/R, что побудило меня попытаться получить ссылки на объекты.
Начал с перечисления all_objects для конкретного пользователя и просто выбрал один объект (CF02), тип которого TABLE
, т.е. OBJECT_TYPE = 'TABLE'
Затем я открыл таблицу и просто перешел к одной из строк, первое поле которой (OBJECT_ID
) равно 9142055040413031761
.
Затем я попытался получить ref()
в этой строке.
SELECT ref(cf) FROM rdbmgr.CF02 as cf
WHERE OBJECT_ID = 9142055040413031761
Надеясь получить результат, аналогичный тому, что в книгах Oracle, который является внутренним номером для местоположения объекта...
я попробовал это, затем выдает ошибку "CF": неверный идентификатор
Является ли CF02
таблица объектного типа или обычная таблица со столбцом объекта? Пожалуйста, включите соответствующий DDL в свой вопрос.
в таблице ALL_OBJECTS в столбце OBJECT_TYPE он отображается как «ТАБЛИЦА»
я также не уверен, как я получу DDL - я не делал эту базу данных. - но я бы предположил, что SELECT * ALL_OBJECTS WHERE OBJECT_TYPE = 'TABLE' будет отображать только таблицы типа объекта...
select dbms_metadata.get_ddl('TABLE', 'CF02', 'RDBMGR') from dual;
, но вам потребуются либо мощные привилегии, либо вход в систему как rdbmgr
. И вам может понадобиться set long 5000
или что-то подобное, чтобы увидеть все это. И вам также нужен DDL для типа (ов) объекта.
вы можете использовать функцию ref()
, если ваша таблица была создана из типа объекта.
REF
takes as its argument a correlation variable (table alias) associated with a row of an object table or an object view.
например у вас есть тип объекта:
create or replace TYPE t_pos AS OBJECT
(
x number,
y number
)
/
вы можете создать таблицу
CREATE TABLE position OF t_pos ;
-- insert some data for test
insert into position values (1,2);
так что у вас есть стол position
теперь вы можете выбрать с помощью функции ref
select ref(t) from position t;
Результат:
REF(E)
--------------------------------------------------------------------------------
0000280209587CADBD96F74009BBF01C1596D74E72E7986EC7F3AF40B4A264DA1BE6FE27D30040B2
790000
если ваша таблица была создана как create table position(x number, y number)
вы не можете использовать функцию ref
в своем select
Посмотрите документацию здесь
благодарить! поэтому таблица объектов должна быть создана с использованием типа объекта для оракула, чтобы предлагать какие-либо ссылки на объекты в таблице... я думаю, потому что, хотя они являются похожими объектами, технически они не являются одним и тем же типом объекта ?
Ничего общего с ref - удалите
as
изas cf
. Вы не можете использоватьas
для псевдонимов таблиц в Oracle.