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

в шелл запускается 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
20.05.2019, 18:50
    #39815470
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlplus: как перехватить ошибку в таком случае?
Код: plaintext
WHENEVER OSERROR
тоже не перехватывает ошибку?
...
Рейтинг: 0 / 0
20.05.2019, 18:54
    #39815475
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlplus: как перехватить ошибку в таком случае?
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
20.05.2019, 18:55
    #39815477
AndrewLVVa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlplus: как перехватить ошибку в таком случае?
SQL*Plus,

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


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

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

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


DEFINE param240char=&1;

exit;
...
Рейтинг: 0 / 0
20.05.2019, 19:03
    #39815482
AndrewLVVa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlplus: как перехватить ошибку в таком случае?
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
20.05.2019, 19:15
    #39815487
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlplus: как перехватить ошибку в таком случае?
AndrewLVVa,

Значит в java class нужна проверка
...
Рейтинг: 0 / 0
21.05.2019, 07:33
    #39815603
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlplus: как перехватить ошибку в таком случае?
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
21.05.2019, 10:00
    #39815652
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlplus: как перехватить ошибку в таком случае?
-2-

Жулик :))

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

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


К сожалению

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

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

Как по мне, ето очень нехорошо - если нет возможности проконтролировать такую вещь и в рантайме перехватить ошибку :-(
...
Рейтинг: 0 / 0
21.05.2019, 11:13
    #39815691
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlplus: как перехватить ошибку в таком случае?
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
21.05.2019, 11:42
    #39815704
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlplus: как перехватить ошибку в таком случае?
Vadim Lejninверсия не ниже 12.2
Версия шелла? А какого?
...
Рейтинг: 0 / 0
21.05.2019, 12:01
    #39815721
AndrewLVVa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlplus: как перехватить ошибку в таком случае?
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
21.05.2019, 12:05
    #39815724
AndrewLVVa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlplus: как перехватить ошибку в таком случае?
Шелл ни при чем. Проблема, что мне надо в шелл вернутся после работи скрипта и перехватить ошибку, если скрипт не запускался.
...
Рейтинг: 0 / 0
22.05.2019, 07:35
    #39816135
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlplus: как перехватить ошибку в таком случае?
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sqlplus: как перехватить ошибку в таком случае? / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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