Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 SQL*Plus Выполнение скрипта по условию.  [new]
MinistrBob
Member

Откуда: Москва
Сообщений: 281
Задача: Выполняется скрипт в SQL*PLus из него нужно проверить установлен или нет в БД "Oracle Text".
Если не установлен тогда установить его т.е. запустить еще несколько подскриптов.
Если уже установлен тогда основной скрипт должен продолжить работу.

Ну предположим установлен ли Oracle Text можно проверить запросом

SELECT COUNT(*) INTO a FROM DBA_REGISTRY WHERE comp_id='CONTEXT' AND status='VALID';

1. Первый вариант пробую реализовать через WHENEVER SQLERROR EXIT, пишу вот так

whenever sqlerror exit;
set heading off 

 DECLARE 
  a NUMBER;
BEGIN
  SELECT COUNT(*) INTO a FROM DBA_REGISTRY WHERE comp_id='CONTEXT' AND status='VALID';
  IF a<>0 THEN
     RAISE_APPLICATION_ERROR(-20000,'Oracle Text is installed');
  END IF;
END;
/

set heading on
whenever sqlerror continue;
Тогда падает всё в том числе и основной скрипт, а мне нужно чтобы он продолжился.

2. Хотел попробовать через REFCURSOR. Чтобы получать некое значение в процедуре и потом запускать скрипт имя которого будет содержать это значение (start_script_&installed..sql). Пишу вот так

VARIABLE installed refcursor;

begin
open :installed for SELECT COUNT(*) FROM DBA_REGISTRY WHERE comp_id='CONTEXT' AND status='VALID';
end;
/

PROMPT &installed 

Блин. За пределами процедуры на переменную :installed можно только посмотреть, например командой PRINT installed, а использовать в имени файла не получается, не видит её SQL*plus.

Может быть у кого-нибудь будут какие-нибудь мысли, а то уже ничего в голову не идет. Чуть вывих головного мозга не получил )))
15 июн 06, 17:24    [2776241]     Ответить | Цитировать Сообщить модератору
 Re: SQL*Plus Выполнение скрипта по условию.  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Скокахош
15 июн 06, 17:40    [2776349]     Ответить | Цитировать Сообщить модератору
 Re: SQL*Plus Выполнение скрипта по условию.  [new]
softy
Member

Откуда: from Russia
Сообщений: 5911
Мысли такие. К переменной, которая была определена через фразу VARIABLE обращаются просто по имени, без использования символа &.

Соответственно если ты хочешь вывести значение переменной "installed", то нужно использовать не PROMPT, а PRINT

VARIABLE installed refcursor;

begin
open :installed for SELECT COUNT(*) FROM DBA_REGISTRY WHERE comp_id='CONTEXT' AND status='VALID';
end;
/

PRINT installed

Только значение такое выводится:
PL/SQL procedure successfully completed.


  COUNT(*)
----------
         0

А ты что ждёшь?
15 июн 06, 17:53    [2776423]     Ответить | Цитировать Сообщить модератору
 Re: SQL*Plus Выполнение скрипта по условию.  [new]
MinistrBob
Member

Откуда: Москва
Сообщений: 281
mcureenab
Скокахош



Спасибо за наводку. А то иногда просто даже и не знаешь какие критерии поиска задавать, т.е. чего искать в форуме.

Получилось реализовать ветвление через COL xxx NEW_VAL xxx ...

softbuilder@inbox.ru
Мысли такие. К переменной, которая была определена через фразу VARIABLE обращаются просто по имени, без использования символа &.

Соответственно если ты хочешь вывести значение переменной "installed", то нужно использовать не PROMPT, а PRINT
...
А ты что ждёшь?


То что значение переменной можно вывести командой PRINT я и сам знаю, читайте внимательно мой топик, но мне не смотреть нужно на значение переменной, а использовать его в SQL*Plusе.

Короче, спасибо за помощь, я полностью удовлетворен )))
15 июн 06, 18:22    [2776555]     Ответить | Цитировать Сообщить модератору
 Re: SQL*Plus Выполнение скрипта по условию.  [new]
Elic
Member

Откуда:
Сообщений: 29979
Примеры есть даже у самого Oracle: RTFM owainst.sql
15 июн 06, 18:46    [2776640]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить