Right. So I’ve created a stored procedure in a MySQL DB which happens to use SUBSTRING.
Running the procedure via a query gives me:
SQL Error 1630: Function mydatabase.SUBSTRING does not exist
Beg your pardon?
Rob♦
27.3k16 gold badges82 silver badges97 bronze badges
asked Aug 17, 2010 at 22:04
Robin RodricksRobin Rodricks
110k141 gold badges396 silver badges606 bronze badges
4
Is there a space after the method call to Substring
before the first parenthesis?
It appears on Line 40:
IF i > 1 AND j > 1 AND (s1_char = SUBSTRING (s2, j - 1, 1))
i.e. Ensure
select substring(CustomerName, 1, 4) AS CustName from MyTable;
instead of:
select substring (CustomerName, 1, 4) AS CustName from MyTable;
answered Aug 17, 2010 at 22:12
p.campbellp.campbell
98.2k67 gold badges255 silver badges320 bronze badges
2
The code I am trying is as follows:
SELECT CONCAT(D.DriverFirstName,' ',D.DriverLastName)AS'Full Name',
SUM(T.EndOdometerKM-T.StartODometerKM) AS'Total KM Travelled'
FROM DRIVER AS D, TRIP AS T
WHERE D.DriverLicenceNum=T.DriverLicenceNum
GROUP BY T.DriverLicenceNum
HAVING SUM (T.EndOdometerKM-T.StartOdometerKM)>1000
ORDER BY SUM (T.EndOdometerKM-T.StartOdometerKM)ASC;
However, I receive this error message:
#1630 - FUNCTION dbname.SUM does not exist.
According to other posts, the problem is usually whitespace between the function and parentheses (SUM (code))
as opposed to (SUM(code))
, yet my problem still persists without the whitespace.
miken32
41.5k16 gold badges108 silver badges153 bronze badges
asked Sep 14, 2017 at 16:52
this way should work
SELECT
CONCAT(D.DriverFirstName,' ',D.DriverLastName) AS 'Full Name',
SUM(T.EndOdometerKM-T.StartODometerKM) AS 'Total KM Travelled'
FROM DRIVER AS D, TRIP AS T
WHERE D.DriverLicenceNum=T.DriverLicenceNum
GROUP BY T.DriverLicenceNum
HAVING SUM(T.EndOdometerKM-T.StartOdometerKM) > 1000
ORDER BY SUM(T.EndOdometerKM-T.StartOdometerKM) ASC;
answered Sep 14, 2017 at 16:55
ScaisEdgeScaisEdge
132k10 gold badges90 silver badges105 bronze badges
2
Есть ли пробел после вызова метода на Substring
перед первой скобкой?
Он отображается в строке 40:
IF i > 1 AND j > 1 AND (s1_char = SUBSTRING (s2, j - 1, 1))
то есть. Убедитесь, что
select substring(CustomerName, 1, 4) AS CustName from MyTable;
вместо:
select substring (CustomerName, 1, 4) AS CustName from MyTable;
Содержание
- MacLochlainns Weblog
- Placement over substance
- MacLochlainns Weblog
- Archive for the ‘SQL_MODE’ tag
- Placement over substance
- MySQL Server Error Codes and Messages 1600 — 1649
- MacLochlainns Weblog
- Archive for the ‘SUM function’ tag
- Placement over substance
- Русские Блоги
- [MySQL] При вызове хранимой процедуры отображается ОШИБКА 1305 (42000): PROCEDURE test.sp1 не существует
- Описание проблемы:
- Исправление проблем:
- Интеллектуальная рекомендация
- Реализация оценки приложения iOS
- JS функциональное программирование (е)
- PWN_JarvisOJ_Level1
- Установка и развертывание Kubernetes
- На стороне многопроцессорного сервера — (2) *
MacLochlainns Weblog
Michael McLaughlin’s Technical Blog
Placement over substance
I was stunned when a SQL query raised an ERROR 1630 (42000) telling me the SUM function didn’t exist in MySQL 5.5.23. The fix was simple. The opening parenthesis of the SUM function must be on the same line as the SUM keyword without an intervening white space. Alternatively phrased, you can’t have a line return or white space between the SUM function name and the opening parenthesis of the call parameter list. The same rule doesn’t apply to the opening parenthesis of the FORMAT function and it seems to me that this parsing inconsistency is problematic.
Therefore, my surprise, observation, and complaint is that all functions don’t parse the same way, using the same rules. That is, unless you use specialized SQL_MODE settings. This assumption was borne out by Kolbe Kegel’s comment on this post, and there are 30 remaining built in functions that have specialized parsing and resolution markers.
A simplified version of the code that raises the error follows. As you’ll notice the opening parenthesis for the FORMAT and SUM function have intervening white space and a line return.
SELECT t.transaction_account AS «Transaction» , LPAD(FORMAT (SUM (CASE WHEN EXTRACT(MONTH FROM transaction_date) = 1 AND EXTRACT(YEAR FROM transaction_date) = 2011 THEN CASE WHEN t.transaction_type = cl.common_lookup_type THEN t.transaction_amount ELSE t.transaction_amount * -1 END END),2),10,’ ‘) AS «JAN» FROM TRANSACTION t CROSS JOIN common_lookup cl WHERE cl.common_lookup_table = ‘TRANSACTION’ AND cl.common_lookup_column = ‘TRANSACTION_TYPE’ AND cl.common_lookup_type = ‘DEBIT’ GROUP BY t.transaction_account;
Based on the comments, the SQL_MODE is:
It raises the following error:
ERROR 1630 (42000): FUNCTION studentdb.SUM does not exist. Check the ‘Function Name Parsing and Resolution’ section in the Reference Manual
Moving ONLY the opening parenthesis to the end of the SUM keyword (or removing the line return and white space from between the SUM keyword and opening parenthesis) prevents the error but it would be more convenient if it supported both approaches. It seems odd that an intervening line return and white space for the SUM function raises an exception while the same intervening line return and white space doesn’t raise an exception for the FORMAT function. It strikes me the parser should support both or reject both. Here’s the fixed code that works without enabling the IGNORE_SPACE SQL Mode option.
SELECT t.transaction_account AS «Transaction» , LPAD(FORMAT (SUM( CASE WHEN EXTRACT(MONTH FROM transaction_date) = 1 AND EXTRACT(YEAR FROM transaction_date) = 2011 THEN CASE WHEN t.transaction_type = cl.common_lookup_type THEN t.transaction_amount ELSE t.transaction_amount * -1 END END),2),10,’ ‘) AS «JAN» FROM TRANSACTION t CROSS JOIN common_lookup cl WHERE cl.common_lookup_table = ‘TRANSACTION’ AND cl.common_lookup_column = ‘TRANSACTION_TYPE’ AND cl.common_lookup_type = ‘DEBIT’ GROUP BY t.transaction_account;
As noted by the comments, adding the IGNORE_SPACE to the SQL_MODE lets both queries work without moving the open parenthesis. You can do that in a session with the following syntax (which is covered in an older post):
SET SQL_MODE=(SELECT CONCAT(@@sql_mode,’,IGNORE_SPACE’));
Источник
MacLochlainns Weblog
Michael McLaughlin’s Technical Blog
Archive for the ‘SQL_MODE’ tag
Placement over substance
I was stunned when a SQL query raised an ERROR 1630 (42000) telling me the SUM function didn’t exist in MySQL 5.5.23. The fix was simple. The opening parenthesis of the SUM function must be on the same line as the SUM keyword without an intervening white space. Alternatively phrased, you can’t have a line return or white space between the SUM function name and the opening parenthesis of the call parameter list. The same rule doesn’t apply to the opening parenthesis of the FORMAT function and it seems to me that this parsing inconsistency is problematic.
Therefore, my surprise, observation, and complaint is that all functions don’t parse the same way, using the same rules. That is, unless you use specialized SQL_MODE settings. This assumption was borne out by Kolbe Kegel’s comment on this post, and there are 30 remaining built in functions that have specialized parsing and resolution markers.
A simplified version of the code that raises the error follows. As you’ll notice the opening parenthesis for the FORMAT and SUM function have intervening white space and a line return.
SELECT t.transaction_account AS «Transaction» , LPAD(FORMAT (SUM (CASE WHEN EXTRACT(MONTH FROM transaction_date) = 1 AND EXTRACT(YEAR FROM transaction_date) = 2011 THEN CASE WHEN t.transaction_type = cl.common_lookup_type THEN t.transaction_amount ELSE t.transaction_amount * -1 END END),2),10,’ ‘) AS «JAN» FROM TRANSACTION t CROSS JOIN common_lookup cl WHERE cl.common_lookup_table = ‘TRANSACTION’ AND cl.common_lookup_column = ‘TRANSACTION_TYPE’ AND cl.common_lookup_type = ‘DEBIT’ GROUP BY t.transaction_account;
Based on the comments, the SQL_MODE is:
It raises the following error:
ERROR 1630 (42000): FUNCTION studentdb.SUM does not exist. Check the ‘Function Name Parsing and Resolution’ section in the Reference Manual
Moving ONLY the opening parenthesis to the end of the SUM keyword (or removing the line return and white space from between the SUM keyword and opening parenthesis) prevents the error but it would be more convenient if it supported both approaches. It seems odd that an intervening line return and white space for the SUM function raises an exception while the same intervening line return and white space doesn’t raise an exception for the FORMAT function. It strikes me the parser should support both or reject both. Here’s the fixed code that works without enabling the IGNORE_SPACE SQL Mode option.
SELECT t.transaction_account AS «Transaction» , LPAD(FORMAT (SUM( CASE WHEN EXTRACT(MONTH FROM transaction_date) = 1 AND EXTRACT(YEAR FROM transaction_date) = 2011 THEN CASE WHEN t.transaction_type = cl.common_lookup_type THEN t.transaction_amount ELSE t.transaction_amount * -1 END END),2),10,’ ‘) AS «JAN» FROM TRANSACTION t CROSS JOIN common_lookup cl WHERE cl.common_lookup_table = ‘TRANSACTION’ AND cl.common_lookup_column = ‘TRANSACTION_TYPE’ AND cl.common_lookup_type = ‘DEBIT’ GROUP BY t.transaction_account;
As noted by the comments, adding the IGNORE_SPACE to the SQL_MODE lets both queries work without moving the open parenthesis. You can do that in a session with the following syntax (which is covered in an older post):
SET SQL_MODE=(SELECT CONCAT(@@sql_mode,’,IGNORE_SPACE’));
Источник
MySQL Server Error Codes and Messages 1600 — 1649
Message: Creation context of view `%s`.`%s’ is invalid
Message: Creation context of stored routine `%s`.`%s` is invalid
Message: Corrupted TRG file for table `%s`.`%s`
Message: Triggers for table `%s`.`%s` have no creation context
Message: Trigger creation context of table `%s`.`%s` is invalid
Message: Creation context of event `%s`.`%s` is invalid
Message: Cannot open table for trigger `%s`.`%s`
Message: Cannot create stored routine `%s`. Check warnings
Error: 1608 SQLSTATE: HY000 (ER_NEVER_USED)
Message: Ambiguous slave modes combination. %s
Message: The BINLOG statement of type `%s` was not preceded by a format description BINLOG statement.
Message: Corrupted replication event was detected
Message: Invalid column reference (%s) in LOAD DATA
Message: Being purged log %s was not found
Error: 1613 SQLSTATE: XA106 (ER_XA_RBTIMEOUT)
Message: XA_RBTIMEOUT: Transaction branch was rolled back: took too long
Error: 1614 SQLSTATE: XA102 (ER_XA_RBDEADLOCK)
Message: XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected
Error: 1615 SQLSTATE: HY000 (ER_NEED_REPREPARE)
Message: Prepared statement needs to be re-prepared
Message: DELAYED option not supported for table ‘%s’
Message: The master info structure does not exist
Message: option ignored
Message: Built-in plugins cannot be deleted
Error: 1620 SQLSTATE: HY000 (WARN_PLUGIN_BUSY)
Message: Plugin is busy and will be uninstalled on shutdown
Message: %s variable ‘%s’ is read-only. Use SET %s to assign the value
Message: Storage engine %s does not support rollback for this statement. Transaction rolled back and must be restarted
Message: Unexpected master’s heartbeat data: %s
Message: The requested value for the heartbeat period is either negative or exceeds the maximum allowed (%s seconds).
Message: Bad schema for mysql.ndb_replication table. Message: %s
Message: Error in parsing conflict function. Message: %s
Message: Write to exceptions table failed. Message: %s»
Message: Comment for table ‘%s’ is too long (max = %lu)
Message: Comment for field ‘%s’ is too long (max = %lu)
Message: FUNCTION %s does not exist. Check the ‘Function Name Parsing and Resolution’ section in the Reference Manual
Error: 1631 SQLSTATE: HY000 (ER_DATABASE_NAME)
Error: 1632 SQLSTATE: HY000 (ER_TABLE_NAME)
Error: 1633 SQLSTATE: HY000 (ER_PARTITION_NAME)
Error: 1635 SQLSTATE: HY000 (ER_TEMPORARY_NAME)
Error: 1636 SQLSTATE: HY000 (ER_RENAMED_NAME)
Message: Too many active concurrent transactions
Message: Non-ASCII separator arguments are not fully supported
Message: debug sync point wait timed out
Message: debug sync point hit limit reached
Error: 1641 SQLSTATE: 42000 (ER_DUP_SIGNAL_SET)
Message: Duplicate condition information item ‘%s’
Error: 1642 SQLSTATE: 01000 (ER_SIGNAL_WARN)
Message: Unhandled user-defined warning condition
Message: Unhandled user-defined not found condition
Message: Unhandled user-defined exception condition
Message: RESIGNAL when handler not active
Message: SIGNAL/RESIGNAL can only use a CONDITION defined with SQLSTATE
Message: Data truncated for condition item ‘%s’
Message: Data too long for condition item ‘%s’
Error: 1649 SQLSTATE: HY000 (ER_UNKNOWN_LOCALE)
Источник
MacLochlainns Weblog
Michael McLaughlin’s Technical Blog
Archive for the ‘SUM function’ tag
Placement over substance
I was stunned when a SQL query raised an ERROR 1630 (42000) telling me the SUM function didn’t exist in MySQL 5.5.23. The fix was simple. The opening parenthesis of the SUM function must be on the same line as the SUM keyword without an intervening white space. Alternatively phrased, you can’t have a line return or white space between the SUM function name and the opening parenthesis of the call parameter list. The same rule doesn’t apply to the opening parenthesis of the FORMAT function and it seems to me that this parsing inconsistency is problematic.
Therefore, my surprise, observation, and complaint is that all functions don’t parse the same way, using the same rules. That is, unless you use specialized SQL_MODE settings. This assumption was borne out by Kolbe Kegel’s comment on this post, and there are 30 remaining built in functions that have specialized parsing and resolution markers.
A simplified version of the code that raises the error follows. As you’ll notice the opening parenthesis for the FORMAT and SUM function have intervening white space and a line return.
SELECT t.transaction_account AS «Transaction» , LPAD(FORMAT (SUM (CASE WHEN EXTRACT(MONTH FROM transaction_date) = 1 AND EXTRACT(YEAR FROM transaction_date) = 2011 THEN CASE WHEN t.transaction_type = cl.common_lookup_type THEN t.transaction_amount ELSE t.transaction_amount * -1 END END),2),10,’ ‘) AS «JAN» FROM TRANSACTION t CROSS JOIN common_lookup cl WHERE cl.common_lookup_table = ‘TRANSACTION’ AND cl.common_lookup_column = ‘TRANSACTION_TYPE’ AND cl.common_lookup_type = ‘DEBIT’ GROUP BY t.transaction_account;
Based on the comments, the SQL_MODE is:
It raises the following error:
ERROR 1630 (42000): FUNCTION studentdb.SUM does not exist. Check the ‘Function Name Parsing and Resolution’ section in the Reference Manual
Moving ONLY the opening parenthesis to the end of the SUM keyword (or removing the line return and white space from between the SUM keyword and opening parenthesis) prevents the error but it would be more convenient if it supported both approaches. It seems odd that an intervening line return and white space for the SUM function raises an exception while the same intervening line return and white space doesn’t raise an exception for the FORMAT function. It strikes me the parser should support both or reject both. Here’s the fixed code that works without enabling the IGNORE_SPACE SQL Mode option.
SELECT t.transaction_account AS «Transaction» , LPAD(FORMAT (SUM( CASE WHEN EXTRACT(MONTH FROM transaction_date) = 1 AND EXTRACT(YEAR FROM transaction_date) = 2011 THEN CASE WHEN t.transaction_type = cl.common_lookup_type THEN t.transaction_amount ELSE t.transaction_amount * -1 END END),2),10,’ ‘) AS «JAN» FROM TRANSACTION t CROSS JOIN common_lookup cl WHERE cl.common_lookup_table = ‘TRANSACTION’ AND cl.common_lookup_column = ‘TRANSACTION_TYPE’ AND cl.common_lookup_type = ‘DEBIT’ GROUP BY t.transaction_account;
As noted by the comments, adding the IGNORE_SPACE to the SQL_MODE lets both queries work without moving the open parenthesis. You can do that in a session with the following syntax (which is covered in an older post):
SET SQL_MODE=(SELECT CONCAT(@@sql_mode,’,IGNORE_SPACE’));
Источник
Русские Блоги
[MySQL] При вызове хранимой процедуры отображается ОШИБКА 1305 (42000): PROCEDURE test.sp1 не существует
Описание проблемы:
1. Создайте простую хранимую процедуру запроса в MySQL:
2. Затем используйте CALL для вызова этой хранимой процедуры, и ошибка ОШИБКА 1305 (42000): PROCEDURE test.sp1 не существует:
Исправление проблем:
1. Сначала подумайте, действительно ли эта хранимая процедура отсутствует, проверьте текущую хранимую процедуру и убедитесь, что хранимая процедура существует:
2. В это время я думал, что у пользователя нет разрешения на вызов текущей хранимой процедуры, и разрешение хранимой процедуры было предоставлено текущему пользователю. В это время произошла другая ошибка:
Это обнаруживается путем запроса данных, которые необходимо обновить текущую хранимую процедуру перед выполнением оператора авторизации:
Выполните вызов этой хранимой процедуры еще раз, и отобразится успешный вызов:
Интеллектуальная рекомендация
Реализация оценки приложения iOS
Есть два способа получить оценку приложения: перейти в App Store для оценки и оценка в приложении. 1. Перейдите в App Store, чтобы оценить ps: appid можно запросить в iTunes Connect 2. Встроенная оцен.
JS функциональное программирование (е)
Давайте рассмотрим простой пример, чтобы проиллюстрировать, как используется Reduce. Первый параметр Reduce — это то, что мы принимаем массив arrayOfNums, а второй параметр — функцию. Эта функция прин.
PWN_JarvisOJ_Level1
Nc первый Затем мы смотрим на декомпиляцию ida Перед «Hello, World! N» есть уязвимая_функция, проверьте эту функцию после ввода Видно, что только что появившийся странный адрес является пе.
Установка и развертывание Kubernetes
На самом деле, я опубликовал статью в этом разделе давным -давно, но она не достаточно подробно, и уровень не является ясным. Когда я развернулся сегодня, я увидел его достаточно (хотя это было успешн.
На стороне многопроцессорного сервера — (2) *
Обработка сигнала Родительский процесс часто очень занят, поэтому вы не можете просто вызвать функцию waitpid, чтобы дождаться завершения дочернего процесса. Затем обсудите решение. Обратитесь .
Источник
# (отредактировано 6 лет, 11 месяцев назад) |
|
Темы: 23 Сообщения: 175 Участник с: 16 ноября 2013 |
Доброго дня!
Вопрос следующего характера:
Собственно, агрегатная фнкция sum () должна быть глобальной, насколько я понимаю… Или я чего-то не понимаю? Как её вызвать? Или как создать свою агрегатную функцию? |
lampslave |
# |
Темы: 32 Сообщения: 4800 Участник с: 05 июля 2011 |
Функции чувствительны к регистру. |
Anton8830 |
# |
Темы: 23 Сообщения: 175 Участник с: 16 ноября 2013 |
|
Anton8830 |
# |
Темы: 23 Сообщения: 175 Участник с: 16 ноября 2013 |
К пробелам они тоже чувствительны…
|
lampslave |
# |
Темы: 32 Сообщения: 4800 Участник с: 05 июля 2011 |
Хм, получается, про регистр я наврал Но общий смысл сохранятеся, надо как в доке писать, тогда проблем не будет.
|