Как назначить результат выбора в переменную sqlplus - PullRequest
0 голосов
/ 14 апреля 2019

Я пишу командный файл для мастера создания моего табличного пространства.через несколько дней мой результат для этого мастера следующий:

Я создаю переменную с именем 'Path'.затем я выбираю расположение моего файла данных и сохраняю его в «Path».

, поскольку я не могу использовать «Path» в нашем операторе create, тогда я определил переменную в sqlplus с именем «Loc» и передал значение «путь 'в' 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.

1 Ответ

1 голос
/ 14 апреля 2019

Переменные связывания не помогут в 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;
...