When I’m trying to drop table then I’m getting error
SQL Error: ORA-00604: error occurred at recursive SQL level 2
ORA-01422: exact fetch returns more than requested number of rows
00604. 00000 - "error occurred at recursive SQL level %s"
*Cause: An error occurred while processing a recursive SQL statement
(a statement applying to internal dictionary tables).
*Action: If the situation described in the next error on the stack
can be corrected, do so; otherwise contact Oracle Support.
asked May 27, 2015 at 9:15
RaviRavi
30.9k42 gold badges119 silver badges173 bronze badges
9
One possible explanation is a database trigger that fires for each DROP TABLE
statement. To find the trigger, query the _TRIGGERS
dictionary views:
select * from all_triggers
where trigger_type in ('AFTER EVENT', 'BEFORE EVENT')
disable any suspicious trigger with
alter trigger <trigger_name> disable;
and try re-running your DROP TABLE
statement
answered May 27, 2015 at 10:14
Frank SchmittFrank Schmitt
30.2k12 gold badges73 silver badges107 bronze badges
2
I noticed following line from error.
exact fetch returns more than requested number of rows
That means Oracle was expecting one row but It was getting multiple rows. And, only dual table has that characteristic, which returns only one row.
Later I recall, I have done few changes in dual table and when I executed dual table. Then found multiple rows.
So, I truncated dual
table and inserted only row which X
value. And, everything working fine.
answered May 28, 2015 at 6:58
RaviRavi
30.9k42 gold badges119 silver badges173 bronze badges
2
I know the post is old and solved, but maybe someone is facing or will face my situation, so I want to leave the aquired knowledge here, after deal with the error for a week. I was facing the error: «ORA-00604: error occurred at recursive SQL level 1″ , but with the internal error: » ORA-06502: error: character string buffer too smal numeric or value», this happened only when I try to logon the database, and using an specific driver, trying to connect from an Visual Studio C# application, the weirdest thing on that moment was that I connect from SQLDeveloper or TOAD and everything worked fine.
Later I discovered that my machine name had this format «guillermo-aX474b5», then I proceed to rename it like this «guillermo» without the «-» and the other stuff, and it worked!! Looks like in some drivers and situations, ORACLE Database does’nt like the «-» in the LogOn connection.
Hope it helps!
answered Oct 4, 2022 at 12:53
In my previous article, I have explained about the most common errors in Oracle. In This article, I will try to explain another most common error, which has been searched approximately 20000 times in a month by DBAs and developers. While working with a database and performing different scenarios of database every developer or dba might have faced error called as ORA-00604: error occurred at recursive SQL level 1. While working with databases I have frequently faced ORA-00604: recursive error and struggled to solve and debug this issue. I would like to share my experience working and debugging this error. This is most common error and very tricky to solve it.
A recursive SQL statement is a statement that is applied to internal dictionary table.
Why ORA-00604 error will come?
There may be multiple reasons for which this error will come. In this section, I will try to explain what will be possible root cause of this error. Because there are many, possible reasons for the error, Oracle simply states that if the situation described in the next error on the stack can be corrected, it should be corrected. Otherwise, the user should contact the Oracle support line.
Reason 1:
Table and view does not Exist
This may be the one possible cause of this error. If due to any reason if one of the table (system table of oracle) is deleted and user tries to insert or update the data in the table this error will occur.
Reason 2:
Trigger Error
This may be another cause of the error. If trigger attempting to insert the records in audit_log table and audit_log table is dropped by cleanup script then this kind of error will come. This kind of error will occur mostly in system triggers.
Reason 3:
User attempts to run newly created table
When user attempts to run the newly created table this error will occure.The package related to the newly created table needs to be compiled to resolve this error.
NO TIME TO READ CLICK HERE TO GET THIS ARTICLE
Resolution of the error:
I have explained that there is no specific reason of this error. There might be the different possible causes of this error, which I have explained above. In this section, I will try to explain the resolutions of this error.
Solution 1:
Check for table availability
Check for whether all tables used in the triggers are available or not in that oracle schema.If the table is not available then user needs to create the table.
Solution 2:
Trigger Issue Resolution
To check whether this issue is because of trigger execution you need to check:
Alter system set “_system_trig_enabled”=FALSE;
View all triggers where trigger_type is before each row and after each row:
SELECT * FROM dba_triggers
WHERE trigger_type not in (‘before each row’,’after each row’);
To find the most relevant triggers, filter the triggering_event column.
Find the trigger that is causing the problem and disable it or drop it to resolve the issue. Usually, this error occurs in the Oracle database by the system level triggers on DDL or SYSTEM events.
Solution 3:
New table creation issue
If this error will occur due to newly created table then user needs to check the related system packages of oracle and compile package specification and body once.
Example:
User needs to recompile DBMS_CDC_PUBLISH package. User needs to compile all invalid packages that are no longer viewed.So this may be the third possible solution to resolve this kind of error.
Hope you like this article.Please don’t forget to share it with everyone.
I m getting the below SQL exception and I don’t know what’s the root cause for this exception? I am also closing db connection and statement too.
java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-01000: maximum open cursors exceeded
ORA-00604: error occurred at recursive SQL level 1
ORA-01000: maximum open cursors exceeded
ORA-01000: maximum open cursors exceeded
Following is my code:
while(true)
{
Statement stmt2 = conn1.createStatement();
ResultSet rs2 = null;
int rec_count=0;
rs2 = stmt2.executeQuery("select count(*) as cnt from some_table");
while(rs2.next())
{
rec_count = rs2.getInt("cnt");
}
if(rec_count>0)
{
update_qry_b_trg1 = "update some_table set to_be_triggered=1,algo_status='D',dealer_id='HD001',price_trig_date=sysdate where buy_sell = 'SELL' and ordertype = 'BNLD' and to_be_triggered = 0 and algo_status = 'P' and Mod(group_ref_no,5)="+th_id;
String final_qry = "BEGIN \n"+update_qry_b_trg1+";\n"+";\n END;";
int rows = stmt1.executeUpdate(final_qry);
stmt1.close();
}
rs2.close();
stmt2.close();
}
RAS
8,10016 gold badges64 silver badges86 bronze badges
asked Nov 6, 2012 at 10:43
3
Whereever stmt1 is initialized, it is a better idea to close it in a finally block. In your case you are closing it in an if condition. if the condition doesn’t pass, the statement will remain open and you will get this
java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
Also you have this running in a while loop, so you need to make sure, you close each and every Statement which is opened.
answered Apr 25, 2013 at 17:13
HirenHiren
7729 silver badges23 bronze badges
Problem:
Connection from the SQL Developer fails with the following error:
ORA-00604: error occurred at recursive SQL level 1 ORA-12705: Cannot access NLS data files or invalid environment specified
Solution:
Find sqldeveloper.conf
file:
$ find / -name sqldeveloper.conf 2>>/dev/null ^@/System/Volumes/Data/Applications/SQLDeveloper.app/Contents/Resources/sqldeveloper/sqldeveloper/bin/sqldeveloper.conf /Applications/SQLDeveloper.app/Contents/Resources/sqldeveloper/sqldeveloper/bin/sqldeveloper.conf
Add the following two parmeters in /Applications/SQLDeveloper.app/Contents/Resources/sqldeveloper/sqldeveloper/bin/sqldeveloper.conf
AddVMOption -Duser.language=en AddVMOption -Duser.country=US
Restart SQL Developer and try connection again.
Антон (LogRus)
Глобальный модератор Внимание! Люблю сахар в кубиках!
|
Добрый день! Довольно много времени убил на борьбу с этой ошибкой при подключении к серверу Oracle Express Edition из VS.NET 2005 В сети полезной информации почти не нашел, то что нашел было или не по руски и невнятно или по руски и невнятно База UNICODEная. Решение такое лезем в реестр HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_ODACHome1\NLS_LANG устанавливаем в значение RUSSIAN_RUSSIA.AL32UTF8, где: в общем случае NLS_LANG устанавливаем в NLS_LANGUAGE_NLS_TERRITORY.NLS_CHARACTERSET может еще кому поможет. |
||
Странно всё это…. |
RXL
Технический
|
http://ora-00604.ora-code.com/ Как понимаешь, в доменном имени пишется код ошибки и получаем тематическую страницу. NLS — это первым делом, сразу после установки. В том числе и для клиентов. |
||
… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |
Антон (LogRus)
Глобальный модератор Внимание! Люблю сахар в кубиках!
|
RXL, не разу е ставил оракл и не настраивал клиентов а в описании ошибки не говорилось откуда она взялась, видимо глюк какой-то в реализации ODP.NET |
||
Странно всё это…. |
Sla
Команда клуба
|
LogRus, клиент оркала под винду? Нет ничего проще Offtopic: Мой бывший шеф ставил оракл-клиента каждый раз с пакета инсталляции, и каждый раз забывал его пропатчить на руссификацию. Встретился с бывшим коллегой, он сказал что История с инсталляцией продолжается. В случае возникновения ошибок, лучше всего искать на оракловских сайтах, а только потом в инете |
||
Мы все учились понемногу… Чему-нибудь и как-нибудь. |
Антон (LogRus)
Глобальный модератор Внимание! Люблю сахар в кубиках!
|
Клиент виндовый, сервер виндовый на тойже машине. Клиент ко всему прочему еще и .NET |
||
Странно всё это…. |
RXL
Технический
|
ORA-00604: error occurred at recursive SQL level string Вот эта самая следующая ошибка есть? |
||
… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |
Антон (LogRus)
Глобальный модератор Внимание! Люблю сахар в кубиках!
|
она, только в ней |
||
Странно всё это…. |
RXL
Технический
|
LogRus, думаю, нужно рыться на оракловом сервере — возможно под эту траблу есть патч. Другой вопрос, что там все на английском и большая часть информации (metalink) доступна лишь имеющим поддержку. |
||
… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |
Falsehood
Молодой специалист не может быть |
привет. Решение такое лезем в реестр HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_ODACHome1\NLS_LANG устанавливаем в значение RUSSIAN_RUSSIA.AL32UTF8, где: в общем случае NLS_LANG устанавливаем в NLS_LANGUAGE_NLS_TERRITORY.NLS_CHARACTERSET может еще кому поможет. поможет, если объясните, как узнать, какие NLS_LANGUAGE на серваке, NLS_TERRITORY на серваке и NLS_CHARACTERSET на серваке. пожалуйста |
||
|
Антон (LogRus)
Глобальный модератор Внимание! Люблю сахар в кубиках!
|
В случае Oracle Express Edition в остальных случаях не знаю не моя это сфера знаний |
||
Странно всё это…. |
PooH
Глобальный модератор … и можно без хлеба! |
Falsehood, на каком именно серваке? какой у тебя туда доступ? или ты имеешь ввиду как программо узнать? |
||
Удачного всем кодинга! -=x[PooH]x=- |
Falsehood
Молодой специалист не может быть |
Лёш, спасибо при подключении к БД Oracle 10g Express Edition (из NetBeans 5.5.1, но это, наверное, не очень важно) генерится ошибка: |
||
|
PooH
Глобальный модератор … и можно без хлеба! |
http://ora-12705.ora-code.com/ ORA-12705: Cannot access NLS data files or invalid environment specified что у тебя в переменных окружения? |
||
Удачного всем кодинга! -=x[PooH]x=- |
Falsehood
Молодой специалист не может быть |
ORACLE_HOME = D:\oraclexe\app\oracle\product\10.2.0\server |
||
|
PooH
Глобальный модератор … и можно без хлеба! |
вот, что нашел: http://www.ors.kz/?mod=html&id=277 т.е. у нас фактически 2 пути обхода этой ошибки (WORKAROUND) Первый путь подразумевает 5 действий: Второй путь, использовать драйвер 10.1.0.3. Данный драйвер можно найти в установленной СУБД Oracle Database 10g 10.1.0.3 в каталоге {oracle_home}\jdbc\lib Второй путь проще. Методом проб выяснилось, что для исправления ошибки необходимо заменить библиотеки ojdbc14dms.jar и ojdbc14.jar драйвера Oracle JDBC, который поставляется вместе с JDeveloper 10g, на библиотеки драйвера 10.1.0.3. Заменяем библиотеки, которые находятся по пути {jdeveloper_home}\jdbc\lib. Библиотеки можно скачать тут (http://www.ors.kz/mod/stat.php?dir=20142210020052006110652/lib10103.rar&id=34&id_type=170). |
||
Удачного всем кодинга! -=x[PooH]x=- |
Falsehood
Молодой специалист не может быть |
СПАСИБО!!! драйвера помогли )) |
||
|
Andrusha
Новенький |
Здраствуйте ребята. при подключении к БД Oracle 10g Express Edition (из NetBeans 5.5.1, но это, наверное, не очень важно) генерится ошибка: Сервер Oracle Express Edition 10, локальный, работает на CL8MSWIN1251 кодировке. Насколько я понял ей помогли другие драйвера, то у меня такое не прокатит. Ибо работаю на режимном предприятии, где что-бы закнуть «из вне» безобидную фотографию на рабочий стол, надо пол предприятия оббегать и собрать пачку А4 справок. |
||
|
RXL
Технический
|
Andrusha, если ты прочел последние два поста, то должен понять, что ей помогло обновление клиентских драйверов БД до 10.1.0.3. На текущий момент это жутко старый драйвер. Обратись на работ в службу, заведующую обновлением ПО и затребуй обновление ораклового клиента до 10.2.0.1. Т.е. не надо делать это самостоятельно—запроси соответствующий отдел. Я для NSL_LANG на виндовых клиентах ставлю NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 и настраиваю форматы дат в программе через ALTER SESSION. Работает стабильно. |
||
… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |
Andrusha
Новенький |
Andrusha, если ты прочел последние два поста, то должен понять, что ей помогло обновление клиентских драйверов БД до 10.1.0.3. На текущий момент это жутко старый драйвер. Обратись на работ в службу, заведующую обновлением ПО и затребуй обновление ораклового клиента до 10.2.0.1. Т.е. не надо делать это самостоятельно—запроси соответствующий отдел. Я для NSL_LANG на виндовых клиентах ставлю NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 и настраиваю форматы дат в программе через ALTER SESSION. Работает стабильно. Спасибо большее за оперативный подробный ответ. |
||
|
Sla
Команда клуба
|
Andrusha, насколько я знаю, клиент идет в составе сервера. Если ORA-сервер куплен, то и клиент есть. Но непонятно, почему стоит неправильный клиент на серваке. |
||
Мы все учились понемногу… Чему-нибудь и как-нибудь. |
Andrusha
Новенький |
Sla, ORA-сервер стоит локальный, бесплатный, жутко порезаный Express Edition 10. |
||
|
RXL
Технический
|
Клиент идет также и отдельно от сервера и доступен на сайте Oracle бесплатно—надо только зарегистрироваться. Старые версии порой убирают из публичного доступа, но можно найти его на торрентах: добрые люди выкладывают образа дистрибутивов как есть. Попробуй сперва с NLS_LANG. Так будет проще, чем драйвера ставить. Обычно этот параметр в винде задается ключем в реестре (HKML/Software/Oracle), но можно прописать его как переменную окружения. Проверил: переменная окружения имеет более высокий приоритет, чем запись в реестре. |
||
… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |
Andrusha
Новенький |
Andrusha, переменную окружения лучше вписать внутри программы при подключении или в cmd? |
||
|
RXL
Технический
|
Как будет удобно. |
||
… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |
an0521
Новенький |
Всем Доброго времени суток. Исполнил рекомендации. ошибка не уходит. может ещё что нибудь посоветуете… |
||
|
RXL
Технический
|
Я уже ничего не посоветую, живого Оракла лет уже 6 в глаза не видел. Думаю, стоит начинать с рассказа о своей проблеме. |
||
… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |
an0521
Новенький |
Как приконнектится к серверу ORACLE из под 1C7.7 сервер moon (s1111). сервер с реальными данными. Подключение ко всем серверам осуществлять пользователем XXXX с паролем xxxx. После подключения необходимо инициализировать окружение вызовом функции: Пробую такую конструкцию — не выходит : Connection = CreateObject(«ADODB.Connection»); Connection.Open(ConnectionString); P.S. естественно имена/адреса изменены |
||
|
RXL
Технический
|
SQL Server — это MS, а не Oracle. |
||
… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |