是否可以在 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(插入、更新)返回?的主要内容,如果未能解决你的问题,请参考以下文章