我正在尝试将shell变量传递给SQL * Plus,以用作脚本中create tablespace
语句中的替换变量。
sqlplus -s -l shiyas/******** @/path/schema_creation_script.sql "$DEST_SCH" <<EOF
EOF
上面提到的.sql文件中的表空间创建脚本是
CREATE TABLESPACE &1 DATAFILE '/data1/data/mcpod/&1_01.dbf'
SIZE 104864 k AUTOEXTEND ON NEXT 10240 K FLASHBACK off;
创建表空间失败。我在create tablespace脚本中尝试使用下面的语句:
CREATE TABLESPACE &1 DATAFILE '/data1/data/mcpod/"&1"_01.dbf'
SIZE 104864 k AUTOEXTEND ON NEXT 10240 K FLASHBACK off;
创建了tablspace和datafile。但数据文件是用双引号创建的。
/data1/data/mcpod/"C_40050"_01.dbf
如何传递shell变量并创建表空间而不必在datafule名称中使用双引号?
答案 0 :(得分:0)
您需要使用句点终止替换变量:
######################################################################
# Automatically generated by qmake (3.0) Tue Nov 15 00:30:22 2016
######################################################################
TEMPLATE = app
TARGET = HelloQtWorld
INCLUDEPATH += .
# Input
HEADERS += stdafx.h Test.h
SOURCES += anotherClass.cpp \
main.cpp \
stdafx.cpp \
GeneratedFiles/qrc_helloqtworld.cpp
RESOURCES += helloqtworld.qrc
如果您希望在替换变量之后立即追加字符,请使用句点将变量与字符分开。例如:
CREATE TABLESPACE &1 DATAFILE '/data1/data/mcpod/&1._01.dbf' SIZE 104864 k AUTOEXTEND ON NEXT 10240 K FLASHBACK off; ^
被解释为
SELECT SALARY FROM EMP_DETAILS_VIEW WHERE EMPLOYEE_ID='&X.5'; Enter value for X: 20
你正在做类似的事情。在原始代码中,SELECT SALARY FROM EMP_DETAILS_VIEW WHERE EMPLOYEE_ID='205';
被解释为名为&1_01.dbf
的单个替换变量;这个时期终结了;然后附加1_01
。
您没有为名为dbf
的变量提供值,因此会提示该值。您的shell脚本不会执行此操作,但如果您使用相同的值1_01
再次响应该提示,则C_40050
的最终数据文件参数将为create
,之前没有句点'/data1/data/mcpod/C_40050dbf'
。
通过添加终止周期使其dbf
,您现有的参数仍将用作位置替换值,因此datafile参数将为&1._01.dbf
- 仅'/data1/data/mcpod/C_40050_01.dbf'
部分被替换。