Возможно ли вернуть строку из таблицы как DML (вставка, обновление) в Oracle?

#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 в сообщении. Просто щелкните правой кнопкой мыши на таблице, которую вы хотите получить данные -> Экспорт-> ВСТАВКА-> укажите путь к файлу для сохранения скриптов -> бинго 🙂