是否可以在 Oracle 中将表中的一行作为 DML(插入、更新)返回?

Posted

技术标签:

【中文标题】是否可以在 Oracle 中将表中的一行作为 DML(插入、更新)返回?【英文标题】:Is it possible to return a row from a table as DML (insert, update) in Oracle? 【发布时间】:2011-05-26 19:08:46 【问题描述】:

我正在尝试从表中的一行生成插入语句?

如果该行是 [1 , "myfirstname", "mylastname"] 是否有办法获取如下查询:

" 插入表中的某个 (uid, FirstName, LastName) 值 (1 , "myfirstname", “我的姓氏”)

...不使用动态sql?

谢谢

编辑:

诚然,我对此很懒惰,并试图不使用动态 sql / all_tab_columns。 我希望有一些神奇的函数调用可以返回一行的 DML 语句,就像有一种方法可以获取对象的 DDL 表达式一样:

select dbms_metadata.get_ddl('TABLE','TABLENAME') from dual ...但 DML 连续...我想问太多了。

【问题讨论】:

您的意思是要插入从选择中获得的值? insert into sometable(uid, firstname, lastname) select uid, first, last from someOtherTable; 【参考方案1】:

我认为你需要这个

   insert into table sometable (uid, FirstName, LastName) SELECT 1 ,'myfirstname', 'mylastname' from othertable where somecondition

也看看this

【讨论】:

是的,但这需要我输入与我想要完成的完全相反的所有字段值。假设您不知道列名或它们的类型。感谢您的尝试。【参考方案2】:

试试这个:

select 'insert into tablename (fieldname) values(''' + a.fieldname + ''')' 从表 a 中

根据需要格式化每个字段值。

【讨论】:

【参考方案3】:

您希望将“原始”数据转换为 SQL 插入语句。

使用 SQL 无法做到这一点,但通常 GUI 客户端具有这种功能

【讨论】:

互联网似乎同意你的观点,我会使用动态 sql 做出一些丑陋的事情。谢谢 假设他的字符串格式已知——你可以做一个变通方法。看看我的回答【参考方案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
      )
  ) ;

【讨论】:

好主意。但是虽然它在技术上实现了相同的效果,但我认为这不是 LoudNPossiblyWrong 所要寻找的 ;)【参考方案5】:

从 Oracle 网站下载 SQLDeveloper(它是免费的)。 登录到您的数据库架构,然后从表列表中,右键单击要从中获取数据的表,选择“导出...”,然后按照向导步骤操作,为您的数据选择“插入”格式。它将为您的表中的数据创建一个插入语句文件。 您可以通过在向导的一个步骤中提供 where 子句条件将其限制为仅行的子集。

【讨论】:

【参考方案6】:

是的,您可以在 Oracle Sqldeveloper 中执行此操作。 正如 CMG 在帖子中所说,这很容易。 只需右键单击要获取数据的表-->导出-->插入-->指定文件路径以保存脚本-->宾果:)

【讨论】:

以上是关于是否可以在 Oracle 中将表中的一行作为 DML(插入、更新)返回?的主要内容,如果未能解决你的问题,请参考以下文章

在Oracle中将多行合并为一行? [复制]

可以将另一个表作为表中的一行引用吗?

在jQuery中添加表格行

在 Oracle 中将结果集插入到表中

是否可以在不循环的情况下为 iSeries 表中的每一行生成唯一的数值?

oracle中,如何在一张表插入数据,使得插入数据的某些字段为其他表中的数据