gpt4 book ai didi

oracle - 如何从嵌套脚本假脱机到不同的文件?

转载 作者:行者123 更新时间:2023-12-02 04:01:33 24 4
gpt4 key购买 nike

是否可以从嵌套脚本假脱机到不同的文件?我有一个脚本调用另一个脚本。第一个脚本将所有内容打印到输出。我只想将第二个脚本的某些部分保存在不同的文件中。

但是当我在第二个脚本中停止假脱机时,它完全停止,并且我不知道如何再次启动它以使其继续在第一个文件中假脱机。

例如,有这两个脚本,第二个 Select to MY_TABLE 不会被假脱机。

firstScript.sql

prompt --------------Start firstScript--------------
set pagesize 0
set heading on
set feedback on
set timing on
set time on
set echo on
set verify on

spool testFirstScript.sql

select DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE') from dual;

@secondScript.sql

select * from MY_TABLE where Id = 1; -- This doesn't get spooled.

spool off

prompt --------------End firstScript--------------

secondScript.sql

prompt --------------Start secondScript--------------

spool testSecondScript.sql

select * from MY_TABLE;

spool off
prompt --------------End secondScript--------------
<小时/>

线轴输出:

testFirstScript.sql

11:28:23 SQL> 
11:28:23 SQL> select DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE') from dual;

CREATE TABLE "S1"."MY_TABLE"
( "ID" NUMBER,
"NAME" VARCHAR2(30)



1 row selected.

Elapsed: 00:00:01.08
11:28:24 SQL>
11:28:24 SQL> @secondScript.sql
11:28:24 SQL> prompt --------------Start secondScript--------------
11:28:24 >
--------------Start secondScript-------------
11:28:24 SQL> spool testSecondScript.sql

testSecondScript.sql

11:28:24 SQL> 
11:28:24 SQL> select * from MY_TABLE;
1 Test1
2 Test2

2 rows selected.

Elapsed: 00:00:00.36
11:28:24 SQL>
11:28:24 SQL> spool off

最佳答案

当您使用 @ 运行脚本时,该文件的内容将嵌入到父文件中,因此从 SQL*Plus 的角度来看,您只是运行一个长脚本。 SQL*Plus 命令未本地化到子脚本。

您必须在嵌入脚本之后再次开始假脱机,使用 APPEND clause ,例如在firstScript.sql中:

...
spool testFirstScript.sql

select DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE') from dual;

@secondScript.sql

-- restart spooling
spool testFirstScript.sql append

...

通过这一更改,testFirstScript.sql 现在具有:

16:28:14 SQL>
16:28:14 SQL> select DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE') from dual;

DBMS_METADATA.GET_DDL('TABLE','MY_TABLE')
--------------------------------------------------------------------------------

CREATE TABLE "STACKOVERFLOW"."MY_TABLE"
( "ID" NUMBER,
"NAME" VARCHAR2(


1 row selected.

Elapsed: 00:00:00.26
16:28:14 SQL>
16:28:14 SQL> @secondScript.sql
16:28:14 SQL> prompt --------------Start secondScript--------------
16:28:14 >
--------------Start secondScript-------------
16:28:14 SQL> spool testSecondScript.sql
16:28:14 SQL>
16:28:14 SQL> select * from MY_TABLE where Id = 1; -- This doesn't get spooled.
16:28:14 2
16:28:14 SQL> spool off

并且 testSecondScript.sql 仍然有:

16:28:14 SQL>
16:28:14 SQL> select * from MY_TABLE;

no rows selected

Elapsed: 00:00:00.00
16:28:14 SQL>
16:28:14 SQL> spool off

您可能还想在@secondscript之前假脱机。并设置 long 32000(或其他一些大数字),以便您看到整个 dbms_metadata 输出,尽管我意识到这只是一个示例。

关于oracle - 如何从嵌套脚本假脱机到不同的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30263061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com