Можно ли пройти через поля типов строк в Oracle? - PullRequest
3 голосов
/ 26 мая 2011

Скажи, что у меня есть что-то вроде этого:

somerecord SOMETABLE%ROWTYPE;

Можно ли получить доступ к полям некоторой записи, не зная имен полей? Что-то вроде somerecord [i] такое, что порядок полей будет таким же, как порядок столбцов в таблице?

Я видел несколько примеров использования динамического SQL, но мне было интересно, есть ли более чистый способ сделать это.

Что я пытаюсь сделать, это сгенерировать / получить DML (вставить запрос) для определенной строки в моей таблице, но я не смог ничего найти по этому вопросу.

Если есть другой способ сделать это, я был бы рад использовать, но также было бы очень любопытно узнать, как выполнить первую часть этого вопроса - он более универсален.

Спасибо

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Это не совсем отвечает на вопрос, который вы задали, но может дать вам желаемый результат ...

Вы можете запросить представление USER_TAB_COLUMNS (или другие подобные представления * _TAB_COLUMN), чтобы получить такую ​​информацию, как имя столбца (COLUMN_NAME), положение (COLUMN_ID) и тип данных (DATA_TYPE) для столбцов в таблице (или представлении) ), который вы можете использовать для создания DML.

Вам все равно потребуется использовать динамический SQL для выполнения сгенерированного DML (или, по крайней мере, генерировать статический SQL отдельно).

Однако этот подход не будет работать для идентификации столбцов в произвольном запросе (если только вы не создадите его представление). Если вам это нужно, вам, возможно, придется прибегнуть к DBMS_SQL (или другим инструментам).

Надеюсь, это поможет.

1 голос
/ 27 мая 2011

Насколько я знаю, не существует чистого способа ссылаться на поля записей по их индексу.

Однако, если у вас есть много разных видов обновлений одной и той же таблицы, каждое из которых имеет свой собственный столбец, установленный наобновление, вы можете избежать динамического sql и посмотреть в направлении статического заполнения вашей записи значениями, а затем выдать update someTable set row = someTableRecord where someTable.id = someTableRecord.id;.

. У этого подхода есть свои недостатки, такие как выдача обновления для каждого,даже неизменный столбец, и, таким образом, создание дополнительных данных журнала повторов, но я считаю, что это следует учитывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...