Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Администрирование Oracle Database:
- Установка и настройка базы данных
- Обновление, применение патчей
- Оптимизация, настройка производительности
- Обучение, подготовка персонала, оптимизация
  • Страница:
  • 1

ТЕМА: Oracle: Об использовании bind переменных в sql скриптах и спуллинге

Oracle: Об использовании bind переменных в sql скриптах и спуллинге 29 авг 2011 05:00 #3509

  • Daymon
  • Daymon аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 50
  • Спасибо получено: 0
Коллеги, несколько вопросов:

1. При спуле в файл выхода из sqlplus( используем скрипт и привязанными переменными) получаем:

old 1: select File_name from dba_data_files where tablespace_name ='&1'
new 1: select File_name from dba_data_files where tablespace_name ='XDB'

M:\ORADATA\OPER1\XDB01.DBF

НУЖНО избавится от спула описания привязки параметров вызова к переменным.

2. Если вызываемый скрипт содержит анонимный блок (пример:

declare
vol varchar2(100);
begin
select File_name into vol from dba_data_files where tablespace_name ='XDB';
end;
--exit;
)
то, вместо выполнения скрипта с таким блоком,я получаю пригашение плюса, в виде последовательного перебора чисел, например:

I:\rem>st r sel_1 XDB

I:\rem>sqlplus /nolog @r.sql sel_1 XDB

SQL*Plus: Release 9.2.0.1.0 - Production on Tue Apr 22 05:22:32 2003

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected.
12
13
14
15 /
old 5: select File_name into vol from dba_data_files where tablespace_name ='&1';
new 5: select File_name into vol from dba_data_files where tablespace_name ='XDB';
spool off;
*
ERROR at line 10:
ORA-06550: line 10, column 1:
PLS-00103: Encountered the symbol "SPOOL"


SQL>

в примере, после первого числа (12) я нажимал ввод, а после последнего /

потом мы видем привязку переменных, а затем (вместо выполнения селеста) управление возвращается в вызывающий скрипт.

Вопрос: почему так получается, как это обойти... Execute_immediate ?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Об использовании bind переменных в sql скриптах и спуллинге 29 авг 2011 05:00 #3510

  • Klond
  • Klond аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 50
  • Спасибо получено: 0
я бы для начала( на твоём месте) определился для себя что такое "bind-переменные" они же переменные привязки и что такое переменные подстановки и разобрался бы в чём между ними разница.

А уже потом писал бы скрипты, и задавал вопросы.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Об использовании bind переменных в sql скриптах и спуллинге 29 авг 2011 05:01 #3511

2 - Вероятно в конце анонимного блока скрипта SQL*Plus упущен "/"

DECLARE

....

BEGIN

...

END;

/

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Об использовании bind переменных в sql скриптах и спуллинге 29 авг 2011 05:02 #3512

  • Lessa
  • Lessa аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 50
  • Спасибо получено: 0
У меня есть предположение, что у тебя скрипт r.sql неправильно написан.
Если скрипт небольшой, то здесь опубликуй иначе мне пришли на email в zip.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Об использовании bind переменных в sql скриптах и спуллинге 29 авг 2011 05:03 #3513

Цифры - просто переход SQLPlus на новую строку. После end; на следующей строке нет /. Поэтому SQLPlus и не понимает, когда ему послать PL/SQL блок на сервер.

Должно быть так:

declare
vol varchar2(100);
begin
select File_name into vol from dba_data_files where tablespace_name ='XDB';
end;
/
exit;

Чтобы не появлялось

old 1: select File_name from dba_data_files where tablespace_name ='&1'
new 1: select File_name from dba_data_files where tablespace_name ='XDB'

надо поставить, как тут рекомендовалось

SET VERIFY OFF

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1