Oracle SQL Developer:将值插入到另一个SQL文件中进行选择

问题描述

是否可能由于外部脚本而将值从sql Developer插入Oracle sql表中

INSERT
INTO TABLE_A
  (
    ID,VERSION
  ) VALUES (@select.sql)

select.sql文件中的语句看起来像

SELECT ID,VERSION from TABLE_X;

解决方法

这在使用“以脚本方式运行”(F5)的SQL Developer 20中(或在PL / SQL Developer命令窗口中)不起作用。如果必须使用SQL Developer进行操作,那您就不走运了。

如果您清理语法并将调用放在其自己的行上,它将在SQL * Plus和SQLcl中工作。

test_insert.sql

insert into table_a
( id,version )
@@select.sql
/

select.sql

select rownum,1
from   xmltable('1 to 10')

(请注意,您必须确定哪个脚本包含终止的;/。)

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Sep 9 11:27:40 2020
Version 19.3.0.0.0

Copyright (c) 1982,2019,Oracle.  All rights reserved.

Last Successful login time: Wed Sep 09 2020 11:26:30 +01:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0


SQL> @test_insert

10 rows created.

SQL>

SQL> l
  1  insert into table_a
  2  ( id
  3,version )
  4  select rownum,1
  5* from   xmltable('1 to 10')
,

您所说的话,我认为不可能。

如果您付出一些努力,这可能会起作用:

  • 如果select.sql文件位于数据库服务器上,目录中,该目录是Oracle目录对象的,并且
  • 如果应该运行此代码的用户对该目录具有read特权,则
  • 编写一个PL / SQL脚本,该脚本将
    • 使用UTL_FILE读取select.sql compose 一条语句(您的示例仅显示一行;我想其中可能有复杂的语句)并将其放入局部变量
    • 或者,您甚至可以将select.sql文件用作仅一列的外部表
    • 编写另一个-insert-语句(请注意,您输入的错误是 ;这里不应该包含values关键字)
    • 使用execute immediate执行它(是的,这是动态SQL)

我想这样做吗?我不这么认为,但是-现在您可能知道了如何