如何将select的结果分配到sqlplus变量中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将select的结果分配到sqlplus变量中相关的知识,希望对你有一定的参考价值。
我正在为向导创建一个批处理文件创建我的表空间。几天之后,这个向导的结果是下面的代码。
我创建了一个名为'Path'的变量。然后我选择我的数据文件位置并将其存储到“路径”中。
因为我不能在我们的create语句中使用'Path',然后我在sqlplus中定义了一个名为'Loc'的变量,并且我将'path'的值传递给'Loc'。
这是我的脚本:
sqlplus >var path varchar2(100)
sqlplus >exec select substr(name, 1, instr(name, 'USER') - 1) || 'test.ora' into :path from v$datafile where name like '%USER%';
sqlplus >def loc=:path
sqlplus >CREATE TABLESPACE test
1 > LOGGING
2 > BLOCKSIZE 16384 DATAFILE '&loc' SIZE 100M REUSE
3 > AUTOEXTEND
4 > ON NEXT 50M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL
5 > SEGMENT SPACE MANAGEMENT AUTO;
我的脚本的结果是:
SQL> CREATE TABLESPACE test
2 LOGGING
3 BLOCKSIZE 16384 DATAFILE '&loc' SIZE 100M REUSE
4 AUTOEXTEND
5 ON NEXT 50M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL
6 SEGMENT SPACE MANAGEMENT AUTO;
old 3: BLOCKSIZE 16384 DATAFILE '&loc' SIZE 100M REUSE
new 3: BLOCKSIZE 16384 DATAFILE ':path' SIZE 100M REUSE
CREATE TABLESPACE test
*
ERROR at line 1:
ORA-01119: error in creating database file ':path'
ORA-27040: file create error, unable to create file
OSD-04002: unable to open file
O/S-Error: (OS 123) The filename, directory name, or volume label syntax is
incorrect.
答案
绑定变量对DDL,静态或其他方式没有帮助。坚持使用替代变量:
column loc new_value loc
select substr(name, 1, instr(name, 'USER') - 1) || 'test.ora' as loc
from v$datafile where name like '%USER%';
create tablespace test
logging
blocksize 16384
datafile '&loc' size 100m reuse
autoextend on next 50m maxsize unlimited
extent management local
segment space management auto;
以上是关于如何将select的结果分配到sqlplus变量中的主要内容,如果未能解决你的问题,请参考以下文章
获取 sqlplus 的结果并放入脚本 .bat 上的变量中