问题描述
是否可能由于外部脚本而将值从sql Developer插入Oracle sql表中
INSERT
INTO TABLE_A
(
ID,VERSION
) VALUES (@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)
- 使用
我想这样做吗?我不这么认为,但是-现在您可能知道了如何。