#sql #oracle #plsql
#sql #Oracle #plsql
Вопрос:
Я пытаюсь сгенерировать инструкцию insert из строки в таблице?
если строка [1, «myfirstname», «mylastname»], есть ли способ получить запрос типа:
«вставить в таблицу значения sometable (uid, FirstName, LastName) (1 , «myfirstname», «mylastname»)
…без использования динамического sql?
Спасибо
Редактировать:
по общему признанию, я ленив в этом и пытался не использовать динамический sql / all_tab_columns. Я надеялся на какой-нибудь волшебный вызов функции, который возвращает оператор DML для строки так же, как есть способ получить выражение DDL для объекта:
выберите dbms_metadata.get_ddl(‘ТАБЛИЦА’,’ИМЯ_ТАБЛИЦЫ’) из dual … но DML для строки … я думаю, это слишком большая просьба.
Комментарии:
1. вы имеете в виду, что хотите вставить значения, которые вы получаете из select?
2. вставить в sometable(uid, firstname, lastname) выберите uid, first, last из someOtherTable;
Ответ №1:
Я думаю, вам это нужно
insert into table sometable (uid, FirstName, LastName) SELECT 1 ,'myfirstname', 'mylastname' from othertable where somecondition
Также взгляните на это
Комментарии:
1. да, но для этого мне потребовалось бы ввести все значения полей, что является полной противоположностью тому, чего я пытаюсь достичь. Предположим, что вы не знаете имен столбцов или их типов. спасибо за попытку.
Ответ №2:
Попробуйте это:
выберите ‘вставить в значения tablename (fieldname)(«‘ a.fieldname «‘)’ из таблицы a
Отформатируйте каждое значение поля по мере необходимости.
Ответ №3:
Вы хотите превратить «необработанные» данные в инструкцию SQL insert.
Нет способа сделать это с SQL, но обычно клиенты с графическим интерфейсом имеют такую функциональность
Комментарии:
1. интернет, похоже, согласен с вами в этом вопросе, мне придется придумать что-нибудь уродливое, используя динамический sql. спасибо
2. предполагая, что его строка имеет известный формат — вы можете сделать обходной путь. ознакомьтесь с моим ответом
Ответ №4:
Предполагая, что ваш формат строки более или менее статичен, вы можете захотеть поиграть с этим примером:
INSERT
INTO
someTable
(
SELECT
regexp_substr(expr, '[0-9] ') val1 ,
regexp_substr(expr, '[a-zA-Z] ') val2,
regexp_substr(expr, '[a-zA-Z] ', 1, 2) val3
FROM
(
SELECT
'[1 , "myfirstname", "mylastname"]' expr
FROM
dual
)
) ;
Комментарии:
1. Хорошая идея. Но хотя технически это достигает того же эффекта, я не думаю, что это то, что, возможно, неправильно искал Loudn 😉
Ответ №5:
загрузите SQLDeveloper с веб-сайта Oracle (это бесплатно). Войдите в свою схему базы данных и из списка таблиц щелкните правой кнопкой мыши на таблице, из которой вы хотите получить данные, выберите «Экспортировать …», а затем следуйте инструкциям мастера, выбирая формат «Вставить» для ваших данных. Это создаст вам файл инструкций insert для данных в вашей таблице. Вы можете ограничить это только подмножеством строк, указав условия предложения where за один шаг в мастере.
Ответ №6:
Да, вы можете сделать это в Oracle Sqldeveloper. Это просто, как сказал CMG в сообщении. Просто щелкните правой кнопкой мыши на таблице, которую вы хотите получить данные -> Экспорт-> ВСТАВКА-> укажите путь к файлу для сохранения скриптов -> бинго 🙂