【问题标题】:Is it possible to return a row from a table as DML (insert, update) in Oracle?是否可以在 Oracle 中将表中的一行作为 DML(插入、更新)返回?
【发布时间】: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;

标签: sql oracle plsql


【解决方案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 在帖子中所说,这很容易。 只需右键单击要获取数据的表-->导出-->插入-->指定文件路径以保存脚本-->宾果:)

      【讨论】:

        猜你喜欢
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-11
        • 2012-01-20
        • 1970-01-01
        • 2011-01-28
        相关资源
        最近更新 更多