powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sqlplus: как перехватить ошибку в таком случае?
15 сообщений из 15, страница 1 из 1
sqlplus: как перехватить ошибку в таком случае?
    #39815466
AndrewLVVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер. Подскажите, есть ли вариант побороть такую ситуацию:

в шелл запускается sqlplus с скриптом и параметром. Иногда длинна параметра может превышать лимит в 240 символов.

Код: plsql
1.
$ sqlplus .... @sql/script.sql param_with_length_more_240char



результат: Пишет что строка задолгая. но ошибки нет, и сессия не закрывается.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

string beginning "param_with_length_more_240char" is too long. maximum size is 239 characters.
SQL>



WHENEVER SQLERROR EXIT - не помогает, так как до парсинга переменных не доходит

Вариант с

Код: plsql
1.
echo exit | sqlplus и далее по тексту



не подходит, так как в таком случае не удается отловить ошибку.
...
Рейтинг: 0 / 0
sqlplus: как перехватить ошибку в таком случае?
    #39815470
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
WHENEVER OSERROR
тоже не перехватывает ошибку?
...
Рейтинг: 0 / 0
sqlplus: как перехватить ошибку в таком случае?
    #39815475
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewLVVa,

Может проверить параметры передед sqlplus?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#!/bin/bash
MAXLEN=8
#CURLEN=`echo -n "$@"|wc -c`
L=$@
CURLEN=${#L}
echo $CURLEN

if (($CURLEN > $MAXLEN));
then
echo "maxlen error... exit"
exit 1
fi
echo sqlplus $@



закоментированная строк, для случая ксли нет bash
правда и if придется переделывать
...
Рейтинг: 0 / 0
sqlplus: как перехватить ошибку в таком случае?
    #39815477
AndrewLVVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL*Plus,

Нет, тут я так понимаю, что сам скрипт не запускается вобще. По причине лимита.


Тестировал файлик с такима текстом

WHENEVER OSERROR EXIT 1;
WHENEVER SQLERROR EXIT SQL.SQLCODE;

prompt ============ Running script.sql ============


DEFINE param240char=&1;

exit;
...
Рейтинг: 0 / 0
sqlplus: как перехватить ошибку в таком случае?
    #39815482
AndrewLVVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim LejninAndrewLVVa,

Может проверить параметры передед sqlplus?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#!/bin/bash
MAXLEN=8
#CURLEN=`echo -n "$@"|wc -c`
L=$@
CURLEN=${#L}
echo $CURLEN

if (($CURLEN > $MAXLEN));
then
echo "maxlen error... exit"
exit 1
fi
echo sqlplus $@



закоментированная строк, для случая ксли нет bash
правда и if придется переделывать

К сожалению, как вариант почти не подходит :-(

Запуск команд в sqlplus динамически генерится джава класом, которий универсальный и используетcя во многих местах другими командами разработчиков.. Доступа прямого в шелл нету
...
Рейтинг: 0 / 0
sqlplus: как перехватить ошибку в таком случае?
    #39815487
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewLVVa,

Значит в java class нужна проверка
...
Рейтинг: 0 / 0
sqlplus: как перехватить ошибку в таком случае?
    #39815603
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewLVVaдлинна
Код: plsql
1.
2.
3.
4.
5.
6.
7.
~> sql -s юстас/алексу@бд @скрипт 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
old:select length('&1') from dual
new:select length('1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890') from dual

LENGTH('123456789012345678901234567890123456789012345678901234567890123456789012
--------------------------------------------------------------------------------
                                                                            1000
...
Рейтинг: 0 / 0
sqlplus: как перехватить ошибку в таком случае?
    #39815652
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-

Жулик :))

версия не ниже 12.2
...
Рейтинг: 0 / 0
sqlplus: как перехватить ошибку в таком случае?
    #39815667
AndrewLVVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-, Vadim Lejnin,

Спасибо за ответ


К сожалению

https://docs.oracle.com/cd/E11882_01/server.112/e16604/apa.htm#SQPUG141

substitution variable value length 240 characters
...
Рейтинг: 0 / 0
sqlplus: как перехватить ошибку в таком случае?
    #39815671
AndrewLVVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема не в допустимом количестве сиволов. Вариант обойти ето, я найду. Проблема не техническая, не в коде.
Надо просто больше усилий в плане побороть бюрократию и всякие континиус интегрейшени.

Как по мне, ето очень нехорошо - если нет возможности проконтролировать такую вещь и в рантайме перехватить ошибку :-(
...
Рейтинг: 0 / 0
sqlplus: как перехватить ошибку в таком случае?
    #39815691
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejninверсия не ниже 12.2Ниже, выше...
Явных ограничений на размер параметра не было ни в одной из версий клиента. Если речь про версию БД, тоOracle Database Certification Oracle Database 18c
Oracle Database 12cR1, 12cR2
Oracle Database 11g Release 2
Oracle Database Express Edition 11g & 18c
Oracle TimesTen In-Memory Database 11g & 12c
...
Рейтинг: 0 / 0
sqlplus: как перехватить ошибку в таком случае?
    #39815704
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejninверсия не ниже 12.2
Версия шелла? А какого?
...
Рейтинг: 0 / 0
sqlplus: как перехватить ошибку в таком случае?
    #39815721
AndrewLVVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymousVadim Lejninверсия не ниже 12.2
Версия шелла? А какого?


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
$ sqlplus connect_string @sql/sc/script params;

SQL*Plus: Release 12.2.0.1.0 Production on Tue May 21 11:58:47 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

string beginning ""PARAM((..." is too long. maximum size is 239 characters.
SQL>



В моем случае
SQL*Plus: Release 12.2.0.1.0 Production
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
...
Рейтинг: 0 / 0
sqlplus: как перехватить ошибку в таком случае?
    #39815724
AndrewLVVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шелл ни при чем. Проблема, что мне надо в шелл вернутся после работи скрипта и перехватить ошибку, если скрипт не запускался.
...
Рейтинг: 0 / 0
sqlplus: как перехватить ошибку в таком случае?
    #39816135
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewLVVaперехватить ошибку, если скрипт не запускался.
Код: sql
1.
2.
3.
линух:~> sqlplus -s -l я/я@бд @скрипт `for ((i=0;i<250;i++));do echo -n \`expr $i % 10\`; done` <<< 'exit 123'; echo Exit code is $?
string beginning "0123456789..." is too long. maximum size is 239 characters.
Exit code is 123
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sqlplus: как перехватить ошибку в таком случае?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]