An SQL identifier exceeded the maximum number of characters. In Informix Dynamic Server 9.2x or 9.3, the maximum length for identifiers in SQL statements is 128 characters. In other Informix database servers, the maximum length for identifiers in SQL statements is 18 characters.
Check that no identifier in the statement is longer than the maximum length and that no punctuation error, such as a missing space or comma, combines two identifiers into one.
This general error message indicates mistakes in the form of an SQL statement. Look for missing or extra punctuation (such as missing or extra commas, omission of parentheses around a subquery, and so on), keywords misspelled (such as VALEUS for VALUES), keywords misused (such as SET in an INSERT statement or INTO in a subquery), keywords out of sequence (such as a condition of “value IS NOT” instead of “NOT value IS”), or a reserved word used as an identifier.
Database servers that provide full NIST compliance do not reserve any words; queries that work with these database servers might fail and return error -201 when they are used with earlier versions of Informix database servers.
The cause of this error might be an attempt to use round-robin syntax with CREATE INDEX or ALTER FRAGMENT INIT on an index. You cannot use round-robin indexes.
A character that cannot be interpreted as part of an SQL statement is embedded in this statement. If a program constructed the statement, the character might be a nonprinting control character. Make sure the statement contains only printable ASCII characters, and reexecute it.
Where an integer value is expected, an unacceptable numeric constant appears. Inspect the statement and look for numbers that should be integers but that contain a decimal point or the letter e or that are larger than 2,147,483,647 ((2 to the 31st power) – 1).
A numeric constant that is punctuated like a floating-point number (with a decimal point and/or an exponent starting with e) is unacceptable. Possibly the exponent is larger than can be processed.
The keyword ROWID stands for a virtual column that exists only in simple tables. This message refers to the ROWID of a table that is actually a view that is based on a selection involving aggregate functions, grouping, or a join of two or more tables. Such query products do not have ROWID columns. Therefore this view does not have a ROWID, even though it appears to be a table. In order to use ROWID in a query, you have to apply the query to the tables that underlie the view.
The database server cannot find a table or view specified in the statement. The table or view might have been renamed or dropped from the database.
You might also get this message if you omit the keyword “TYPE” when you are trying to grant USAGE privileges on a user-defined type. For example, the following GRANT statement is correct:
GRANT USAGE ON TYPE person_row_type TO usr2;
The following GRANT statement, however, generates error -206:
GRANT USAGE ON person_row_type TO usr2;
Check the names of tables and views in the statement or check for omission of the keyword “TYPE” in a GRANT statement. If the names are spelled as you intended and “TYPE” is not missing, check that you are using the database you want. To find the names of all tables in the database, query the systables table. To find the names of all views, query the sysviews table.
The cursor that is used in this statement was declared FOR UPDATE but with a SELECT statement that joins two or more tables. This action is not supported; the database server does not know how to distribute update values across multiple tables. If you declared the SELECT statement with the cursor, modify either it or the FOR UPDATE clause. If a program constructed the SELECT statement and associated it with the cursor dynamically, the program should inform its user not to use a multitable SELECT statement in this application. (This message occurs only with Version 4.0 or earlier.)
Cannot declare a SELECT INTO statement FOR UPDATE.
When you declare a cursor, you may not use both the INTO clause and the FOR UPDATE clause. To use this cursor to update selected rows, omit the INTO clause. Instead, use an INTO clause on the FETCH statement (or in 4GL, the FOREACH statement).
The database server needed to allocate data-space memory in order to process the query, but none was available. This error may reflect a hardware limit, an operating-system configuration limit, or a temporary shortage of space.
Try the query again after a delay. If it still fails, consult your system administrator. If possible, revise your query to join fewer tables, to order or group on fewer columns, or to operate in two or more separate statements. On DOS systems, exit to the operating-system command line, free some disk space or reduce the complexity of your program, and resubmit the program.
In versions later than 5.01, only this error message informs you that the database server is unable to allocate memory.
An obsolete version of the database software built this database. Convert the database to work with the current software. Use the dbupdate utility. You will have to run it before you use the data. (This message is not current since Version 4.0.)
This statement contains a file pathname that exceeds the maximum length of 64 characters. Inspect the statement to make sure that the pathname is that long. It is possible a punctuation error caused other parts of the statement to be included in the pathname. If this is not the case, either relocate the file or rename some directories along the path with shorter names.
The database server refers to the tables of the system catalog while it processes most statements. When it cannot read one of these important tables, a serious error results. Check the accompanying ISAM error code for more information. The effect of the error depends on the statement that is being executed and the particular table, as follows:
Other statements might be partially complete before the error is detected. Roll back the current transaction and then investigate the cause of the error. Use the oncheck utility (secheck with INFORMIX-SE or tbcheck with INFORMIX-OnLine) to check and repair indexes. If necessary, restore the database from backup and logical-log tapes.
This statement attempts to add an index, either explicitly with CREATE INDEX or implicitly as part of processing a SELECT on multiple unindexed tables. In any case, some error prevents the index from being created. For more information, check the accompanying ISAM error code. Insufficient disk space is a common cause of this problem.
The database server received an interrupt signal from the user, probably because the user pressed the interrupt key (usually Delete or Control-C). The statement ended early. A program should roll back the current transaction and terminate gracefully. If the statement could modify a table, an interactive user should execute the ROLLBACK WORK statement to remove any partial modifications.
The database server cannot completely remove the table. Check the accompanying ISAM error code for more information. Problems with operating-system file permissions, read-only files, or hardware might cause this error.
The database server cannot open the operating-system file or files in which the table is stored. Check the accompanying ISAM error code for more information. Problems with operating-system file permissions, insufficient memory, or hardware might cause this error.
The database server cannot completely drop an index. Check the accompanying ISAM error code for more information. Problems with operating-system file permissions, read-only files, or hardware might cause this error.
Cannot remove ISAM index on file.
The database server cannot completely drop an index. Check the accompanying ISAM error code for more information. Problems with operating-system file permissions, read-only files, or hardware might cause this error.
(or SLV is undefined).
The name appears in the select list or WHERE clause of this query but is not defined in a table and does not appear as a statement local variable (SLV) definition. Check that the column name or SLV name and the names of the selected tables are spelled as you intended.
If all names are spelled correctly, you are not using the right tables, the database has been changed, or you have not defined the SLV. If the name not found is a reference to a column, that column might have been renamed or dropped. If the name not found represents an SLV and you defined the SLV in the statement, make sure that the SLV definition appears before all other references to that SLV name.
This error message can also appear during the execution of an ALTER TABLE statement when the engine tries to update views that depend on the table.
The synonym is not defined in this database. Check that the name is spelled as you intended. Check that you are using the right database. If so, the synonym was probably dropped. Possibly it was dropped automatically when the table for which it stood was dropped. To display all defined synonyms, query systables as follows:
SELECT tabname FROM systables WHERE tabtype = s
The WHERE clause in this statement includes a test of a noncharacter column using the LIKE or MATCHES keyword and the special characters that stand for multiple characters (for example, asterisk and question mark in MATCHES and percent and underscore with LIKE). Use these tests only with columns that are defined as CHAR or VARCHAR in the database. No automatic data conversion is provided. Check that the columns in the WHERE clause are as you intended. If so, the definition of the table(s) has probably changed.
Every SELECT statement must include a FROM clause to name the table or tables that it queries. Check that FROM was spelled and that no extra semicolon ends the statement prematurely. To select only a constant, or to select the only value of a function that is unrelated to any table (such as USER or TODAY), you nevertheless have to name a table. You can select a known row from a system catalog, as in this example.
SELECT today is, TODAY, and I am, USER FROM systables WHERE tabid = 100
The tabid value of the first user-defined table in a database is always 100, so this query always returns exactly one row if any tables are defined. (Version 4.1 and later produce syntax error -201 when the FROM clause is missing.)
Cannot begin savepoint.
Version 4.1 and later can detect this internal error. If the error recurs, please note all circumstances and contact Informix Technical Support.
The database server cannot create a temporary disk file. The file should be created in the directory specified by the DBTEMP environment variable. If DBTEMP is not defined, the database server searches by default in the root directory for a subdirectory named tmp in which to create the temporary disk file. Check the accompanying ISAM error code, and look for operating-system error messages that might give more information. Possibly your account does not have write permission in that directory, or the disk might be full. Since Version 5.01, INFORMIX-SE database server uses the DBTEMP environment variable, but Informix Dynamic Server and INFORMIX-OnLine Dynamic Server do not.
The database server created a temporary disk file but received an error while it attempted to write into the file. Check the accompanying ISAM error code, and look for operating-system messages that might give more information. On UNIX systems, the file should have been created in the directory specified by the DBTEMP environment variable (/tmp by default); on DOS systems, the file should be in the current directory. Possibly that disk is full, or a hardware error occurred. Since Version 5.01, the INFORMIX-SE database server uses the DBTEMP environment variable, but Informix Dynamic Server and INFORMIX-OnLine Dynamic Server do not.
The table name appears twice in the list that follows the word FROM. Review the statement to see if you intended to name some other table the second time. If you intended to join a table to itself, use a table alias for the second and subsequent instances of the table. The following example shows one way to find customers with the same last name:
SELECT main.lname, main.customer_num, sub.customer_num FROM customer main, customer sub WHERE main.lname = sub.lname AND main.rowid != sub.rowid
When you use table aliases (the words main and sub in the example), the table may be selected from two or more times.
The database server cannot open the file in which transaction-log entries are made. No transactions can start until this file is repaired. (In an ANSI-compliant database, nothing can be done; in other databases, only queries can be made.) Report this problem to the database server administrator. For INFORMIX-SE database servers, check the accompanying ISAM error code, and look for operating-system error messages that might give more information. A START DATABASE statement specifies the path to the log file. If the file has been deleted, you can re-create it as an empty file. If the path has changed, you can issue a new START DATABASE statement to redefine it.
The database server is trying to create one of the tables for the system catalog, probably as part of a CREATE DATABASE statement. A problem with the host operating system prevents it. Check the accompanying ISAM error code for more information, and look for operating-system error messages. A shortage of disk space or operating-system file-access permission problems probably caused this error.
The database server is trying to create one of the tables for the system catalog, probably as part of a CREATE DATABASE statement. It created the table, but a problem with the host operating system prevents it from making an index. Check the accompanying ISAM error code for more information, and look for operating-system error messages. Insufficient disk space probably caused this error.
This statement attempts to change the column named ROWID. That column is a part of every table except a fragmented table. You can select it with a SELECT statement and compare it in a WHERE clause, but you cannot alter it with a DDL statement.
This statement names the column ROWID in the list of columns for insertion or update. The row ID is an intrinsic property that cannot be modified. You can select it in a SELECT statement and compare it in a WHERE clause, but you cannot modify its contents.
The database server cannot create a temporary disk file. The file should be created in the directory that the DBTEMP environment variable specifies (or /tmp by default on UNIX systems). Check the accompanying ISAM error code and look for operating-system error messages that might give more information. Possibly your account does not have write permission in that directory, or the disk is full. Since Version 5.01, the INFORMIX-SE database server uses the DBTEMP environment variable, but Informix Dynamic Server and INFORMIX-OnLine Dynamic Server do not.
On a UNIX system, try increasing the maximum number of open files (NFILES parameter on some systems) to approximately 400.
The database server created a temporary file in the directory specified by the DBTEMP environment variable (or /tmp by default on UNIX systems) but encountered an error when it tried to read the file back. Check the accompanying ISAM error code, and look for operating-system error messages that might give more information. Possibly a hardware failure occurred, or possibly another user erased the temporary file accidentally. Since Version 5.01, the INFORMIX-SE database server uses the DBTEMP environment variable, but Informix Dynamic Server and INFORMIX-OnLine Dynamic Server do not.
This statement selects DISTINCT (expression) within an aggregate function. This action is not supported. Select the DISTINCT value and other columns into a temporary table; then select ALL from that table applying the aggregate function.
You cannot alter the contents of a column with the SERIAL data type in the UPDATE statement, even when the updating value is zero. (You can specify a value of zero for a serial column when you use the INSERT statement; the database server ignores the zero and inserts a generated number.) Revise the statement so that only nonserial columns are updated.
Another user has locked a row that this statement selects. If you executed the statement interactively, you can do one of two things. You can wait a short time and reenter the statement. Or you can execute the statement SET LOCK MODE TO WAIT, after which you will rarely see this message again.
In a program, you should roll back the current transaction, wait for an interval of random length, and rerun the transaction. If you run the transaction with a LOCK MODE of WAIT, you can reduce the frequency of this error. But it can still arise in some cases, such as when deadlock is detected. An ISAM error code (-107, -113, -134, -143, -144, or ) usually accompanies this error, and a program might need to make a different response to each of these errors.
This INSERT statement is directed to a view, not to a real table, and one of the columns that is defined in the view is actually the value of an expression. Insertions and updates are not allowed on views that have such columns. Apply the INSERT to the real table on which the view is based.
This statement specifies a width for a column of CHAR data type that is greater than 32,767, or a width for a VARCHAR column that exceeds 255. If you need a column of this size, use the TEXT data type, which allows unlimited lengths. Otherwise, inspect the statement for typographical errors.
Each column that is named or implied in an INSERT statement must have a separate value expression. If the statement does not list specific columns, review the definition of the table for the number of columns and their data types. Also check that the list of expressions in the VALUES clause has no extra or missing comma that might result in an incorrect number of values. Be especially careful of long character strings and expressions with parentheses.
The database server cannot execute a BEGIN WORK statement. Check the accompanying ISAM error code for more information. A problem probably exits in accessing the transaction log.
The database server cannot execute a COMMIT WORK statement. Check the accompanying ISAM error code for more information. A problem probably exists in accessing the transaction log.
The row that is being inserted (or being updated to have a new primary key) contains a duplicate value of some row that already exists, in a column or columns that are constrained to have unique values. Another cause of this error might be a locking conflict if the table lock mode is page. The new or updated row is not inserted.
Roll back the current transaction and execute it again without any duplicate rows or with the locking conflict resolved.
If you are using repeatable read isolation, then the error could be due to a unique constraint being violated. Please refer to error -268.
The database server cannot finish execution of a DELETE statement. Roll back the current transaction; then check the accompanying ISAM error code for more specific information.
The database server cannot execute a ROLLBACK WORK statement. Check the accompanying ISAM error code for more information. A problem probably exists in accessing the transaction log.
The database server cannot begin reading a table. Check the accompanying ISAM error code for more information. The problem might be file permissions, a hardware error, or a corrupted system catalog. Unless the ISAM error code or an operating-system message points to another cause, run the bcheck or secheck utility to verify file integrity.
The database server cannot set the file position to a particular row within the file that represents a table. Check the accompanying ISAM error code for more information. A hardware error might have occurred, or the file might have been corrupted (truncated). Unless the ISAM error code or an operating-system message points to another cause, run the bcheck or secheck utility to verify file integrity.
The database server cannot read the disk page that contains a row of a table. Check the accompanying ISAM error code for more information. A hardware problem might exist, or the table or index file might have been corrupted. Unless the ISAM error code or an operating-system message points to another cause, run the bcheck or secheck utility to verify file integrity.
The database server encountered an error when it attempted to look up a row through an index. Check the accompanying ISAM error code for more information. The table file or the index file might have been corrupted. Unless the ISAM error code or an operating-system message points to another cause, run the oncheck or bcheck utility to verify file integrity.
The database server encountered an error when it attempted to look up a row through an index. Check the accompanying ISAM error code for more information. The table file or the index file might have been corrupted. Unless the ISAM error code or an operating-system message points to another cause, run the bcheck or secheck utility to verify file integrity.
The database server could not apply an audit trail to roll a database forward. Check the accompanying ISAM error code for more information.
Version 4.1 and later products can detect this internal error. If the error recurs, please note all circumstances and contact Informix Technical Support.
When you select INTO TEMP, you are creating a table. As with any table, the columns of a temporary table must all have names. When you select a single column, the column in the temporary table receives the same name. When you select an expression, you must supply a name using a column alias, as in the following example:
SELECT order_num, ship_date, ship_date + 14 expected FROM orders INTO TEMP ord_dates
The temporary table ord_dates has three columns, which are named order_num, ship_date, and expected. The same principle applies to a view: each column must have a name. When you select every column of a view from a table, the view can have the same column names by default. When you derive any column of a view from an expression, you must give all the columns explicit names, as in the following example:
CREATE VIEW ord_dates(order_num, ship_date, expected) AS SELECT order_num, ship_date, ship_date + 14 FROM orders
The database server cannot get a row of a table prior to update. Check the accompanying ISAM error code for more information. Possibly another user has locked the row or the table, or possibly a more serious problem exists.
The ORDER BY or GROUP BY clause uses column-sequence numbers, and at least one of them is larger than the count of columns in the select list. Check that you entered the clause correctly and that you did not omit an item from the select list.
The database server cannot access system information associated with the table. Check the accompanying ISAM error code for more information. Unless the ISAM error code or an operating-system message points to another cause, run the oncheck utility to verify file integrity.
An SQL identifier exceeded the maximum number of characters. In Informix Dynamic Server 9.2x or 9.3, the maximum length for identifiers in SQL statements is 128 characters. In other Informix database servers, the maximum length for identifiers in SQL statements is 18 characters.
Check that no identifier in the statement is longer than the maximum length and that no punctuation error, such as a missing space or comma, combines two identifiers into one.
The number of host variables that you named in the INTO clause of this statement does not match the number of columns that you referenced in the statement.
Locate the text of the statement (in a PREPARE or DECLARE statement) and verify the number of placeholders. Then review the list in the INTO clause to see which item or items are incorrect.
The database server cannot execute this COMMIT WORK or ROLLBACK WORK statement because no BEGIN WORK was executed to start a transaction. Because no transaction was started, you cannot end one. Any database modifications that were made are now permanent; they cannot be rolled back but do not need to be committed. Review the sequence of SQL statements to see where the transaction should have started.
This error can occur when you open a cursor for update and have not started a transaction yet.
You cannot begin a transaction in this database because it does not have a transaction log. In order to support transactions, you must start a transaction log. Refer to your Administrator’s Guide for information on how to start a transaction log.
The database server can handle only a fixed number of prepared SQL statements for each user. This limit includes statements that were prepared with the PREPARE statement and cursors that were declared with the DECLARE statement. This statement (PREPARE, DECLARE, or PREPARE IMMEDIATE) exceeds that limit and is not executed. The FREE statement releases prepared statements. Review the logic of your program, and change it so that it frees prepared statements when it no longer needs them.
Version 5.0 and later database servers do not have this restriction. However, programs that must be compatible with earlier versions should use FREE to stay under the limit.
The current statement (EXECUTE or OPEN) refers to a prepared SQL statement or a cursor that does not exist. Possibly the statement id is invalid, or possibly the statement was prepared and then released with the FREE statement. Review the program logic to make sure that the statement or cursor that is named in this statement is valid, has been properly prepared or declared, and has not been freed prior to this point.
If the program executes a prepared DATABASE statement successfully, the database server automatically frees the prepared statement. As a result, if you free a prepared DATABASE statement, you will receive this error on the FREE statement. You can ignore it in this case.
The current statement refers to a cursor that has not been opened. Review the logic of the program to see how it failed to execute the OPEN statement before it reached this point. Statements that end transactions (COMMIT WORK and ROLLBACK WORK) also close cursors unless the cursors are declared WITH HOLD.
Although you can prepare a SELECT statement, the only way you can then execute that SELECT statement is to associate its statement id with a cursor (use a DECLARE statement) and then open the cursor.
An important exception is the SELECTINTO TEMP statement, which you can execute. You cannot use it with a cursor.
You can execute other prepared statements with the EXECUTE statement. If you know the contents of this SELECT statement at the time you are writing the program, and if you are certain that it will return only a single row of data, you can embed it in the program. If it must be prepared dynamically while the program is running, revise your program to execute it through a cursor.
In general, the database server cannot create the file that will represent this table. Check the accompanying ISAM error code for more information. The file would be created in the database.dbs directory (unless you supplied an IN pathname clause) with INFORMIX-SE. Its filename would begin with the first few letters of table-name, followed by a 3-digit number and the suffix .dat, or .idx. With INFORMIX-SE, a problem might exist with file permissions, or possibly the disk is full.
Informix Dynamic Server, INFORMIX-Universal Server, and INFORMIX-OnLine Dynamic Server allow table fragmentation, which might involve extensive use of dbspaces. You need to check the dbspace that was specified for the table. If no dbspace was specified, then the dbspace in which the database was created is used. For database creation, if no dbspace is specified, then the rootdbs is used. The specified dbspace might not exist, or the disk might be full.
This internal error should not occur. Note all the details of the network software in use and the version number of the database servers in this and the other host system. If the error recurs, please note all circumstances and contact Informix Technical Support.
This statement, probably a FETCH statement that names a cursor declared FOR UPDATE, failed because the row it should have fetched could not be locked. Check the accompanying ISAM error code (usually -107, -113,-134, -143, -144, or -154) for more information. Probably another program is using the row (-107) or table (-113). You can use SET LOCKMODE TO WAIT to eliminate these errors, but detection of deadlock (-143 or -154) and lock table full (-134) can still occur.
The database server created a temporary file in the directory that the DBTEMP environment variable (or /tmp by default on UNIX systems) specifies, but it encountered an error when it tried to write data into the file. Check the accompanying ISAM error code, and look for operating-system error messages that might give more information. Possibly a hardware failure occurred, or the disk is full. Since Version 5.01, the INFORMIX-SE database server uses the DBTEMP environment variable, but Informix Dynamic Server and INFORMIX-OnLine Dynamic Server do not.
You attempted to open an insert cursor. This database has a transaction log. In such a database, you must execute a BEGIN WORK statement before you open a cursor that is declared with an INSERT statement or with the FOR UPDATE clause. Revise the logic of your program so that it starts a transaction before it opens the cursor.
You can ensure that the program also works in databases that do not have a transaction log. Change the program so that immediately after it executes the DATABASE statement, it saves the contents of the second element of the SQLAWARN array of warning flags in the SQL communications area. This element will contain a space if the database does not use transactions, and the letter W if it uses them. At each point where a transaction logically begins or ends, test the saved value. If it contains W, execute the transaction statement to begin or end a transaction.
The current statement uses the WHERE CURRENT OF cursor-name clause, but that cursor has not yet been associated with a current row. Either no FETCH statement has been executed since it was opened, or the most recent fetch resulted in an error so that no row was returned. Revise the logic of the program so that it always successfully fetches a row before it executes this statement.
Informix requires that you place for update cursors inside a transaction. Try placing BEGIN WORK and END WORK around cursor.
The FREE statement released the resources that are attached to the cursor named in this statement. Before you can use the cursor, you must again prepare the SQL statement that is associated with it. If the cursor was declared FOR a statement, re-execute its DECLARE statement. If it was declared FOR a statement identifier, execute the PREPARE statement again.
During execution of this statement, a duplicate value was introduced into a column or columns that a unique constraint protects. The row with the duplicate value was not allowed into the table (not inserted or not updated). For Informix Dynamic Server, any changes that this statement made prior to the discovery of the duplicate value have been rolled back. (The effects of preceding statements in the transaction, if there were any, remain in effect. They must be explicitly rolled back or committed.)
This error occurs in a logging database. However, if you are using repeatable read isolation, error -239 will display instead.
This statement requests a new column that has the NOT NULL constraint. However, when a column is added to an existing table, null values have to be installed in the existing rows. Define a new table that includes this column, then INSERT the data from the old table into it to provide some suitable nonnull values for this column.
The database server created a temporary file in the directory specified by the DBTEMP environment variable (or /tmp by default on UNIX systems) but encountered an error when it tried to position (seek) within it. Check the accompanying ISAM error code, and look for operating-system error messages that might give more information. Possibly a hardware failure occurred, or another user truncated the file. Since Version 5.01, the INFORMIX-SE database server uses the DBTEMP environment variable, but Informix Dynamic Server and INFORMIX-OnLine Dynamic Server do not.
This problem has many possible causes, including a locked table or a full disk. Check the accompanying ISAM error code for more information.
The person who created this table has not granted Select privilege to your account name or to the public. The owner of the table or the DBA must grant this privilege before you can select data from the table.
This error message may also occur if you are using the LOAD command in DB-Access because DB-Access uses the SELECT command to get information about a table before loading or inserting rows.
The person who created this table has not granted Update privilege to your account name or to the public. The owner of the table or the DBA must grant this privilege before you can update a row in this table.
The person who created this table has not granted Delete privilege to your account name or to the public. The owner of the table or the DBA must grant this privilege before you can delete a row in this table.
The person who created this table has not granted Insert privilege to your account name or to the public. The owner of the table or the DBA must grant the privilege before you can insert a row into this table.
The cursor that is named in this statement was not declared in the current session. The current session runs from the execution of a DATABASE statement to the next DATABASE or CLOSE DATABASE statement. Review the logic of the program to see that it executes the DECLARE statement for this cursor after the DATABASE statement.
This UPDATE WHERE CURRENT OF cursor statement refers to a different table than the table referenced by the SELECT statement that was declared with the cursor. Review the program logic to make sure that an update through a cursor updates only the table that the cursor is reading. This message also applies to cursor statements that use DELETE WHERE CURRENT OF.
This SELECT statement calls for ordering on more columns than the database server can support. The limit depends on the database server in use, but all can handle sorting on as many as eight columns. Revise the statement to order on fewer columns. (Version 4.0 and later products have no arbitrary limit on the number of ORDER BY columns. But complex sorts may cause the database server to run out of memory or disk space while it carries out the sort operation.)
Cannot rollback savepoint.
Version 4.1 and later products can detect this internal error. If the error recurs, please note all circumstances and contact Informix Technical Support.
This statement names one or more of the database-level privileges (CONNECT, RESOURCE, and DBA), but it also uses the ON table-name clause. A statement that does not mention a particular table (does not contain the ON clause) must grant or revoke the database-level privileges. The table-level privileges such as INSERT require an ON clause. Do not mix the two kinds in the same statement.
A character literal in this statement exceeds the maximum length. Check the punctuation and length of all quoted strings in the statement. Possibly two missing quotes make a long string out of two short ones. You must revise the statement to use a shorter character string.
Check the accompanying ISAM error code to find out the specific problem, and look for operating-system error messages that might give more information. Possibly the disk is full.
Inspect the current statement, examining the punctuation of all quoted strings. To include the quote character in a literal string, use single apostrophes as string delimiters, as in the following example:
SELECT “, fname,”, “””, lname, “”” FROM customer
Inspect the current statement, and examine the punctuation of comments and quoted strings. You can use curly braces to insert comments into SQL statements, but the braces must balance. Or you can use the double-hyphen to append comments to the end of a line.
A subquery that is used in an expression in the place of a literal value must return only a single row and a single column. In this statement, a subquery has returned more than one row, and the database server cannot choose which returned value to use in the expression. You can ensure that a subquery will always return a single row. Use a WHERE clause that tests for equality on a column that has a unique index. Or select only an aggregate function. Review the subqueries, and check that they can return only a single row.
This error can also occur when you use a singleton SELECT statement to retrieve multiple rows. You must use the DECLARE/OPEN/FETCH series of statements or the EXECUTE INTO statement to retrieve multiple rows.
The cursor that this statement uses has not been properly declared or prepared, or the FREE statement has released it. Review the program logic to ensure that the cursor has been declared. If it has, and if the DECLARE statement refers to a statement id, check that the referenced statement has been prepared.
A column that is part of a primary key cannot have null as its default value.
You cannot add a column of SERIAL data type to an existing table. Such columns may not contain null values, but when you add a column, the database server must put null values in all existing rows. You can add a serial column in three steps. First, add the column with an INTEGER data type. Then update the table with nonnull, unique values in each row of the new column. Finally, use ALTER TABLE MODIFY to change the data type of the column to SERIAL.
This UNLOCK TABLE statement names a table that has not been locked. If you locked the table earlier, it has already been unlocked. Tables are unlocked automatically when a transaction ends or when the database is closed. If another user locked the table, you cannot unlock it.
The table is already locked in exclusive mode. You will have to wait for the table to be unlocked before you proceed.
This statement attempts to update with a cursor that was not declared for update. The database server does not allow this action, as both a security measure that is designed to prevent program errors and a performance feature. To use a cursor with the UPDATE or DELETE statements, you must declare it for update. Review the program logic to make sure that this statement uses the intended cursor.
In an ANSI-compliant database, any cursor can be used for updating; the FOR UPDATE clause is not required (and generates a warning).
If using a IN statement check its SQL doesn’t contain constants.
The current LOCK TABLE statement cannot be executed because you have already locked the same table using a different mode (EXCLUSIVE or SHARE). To change the lock mode, arrange to unlock the table before you lock it again.
This INSERT statement does not supply values for all the columns in the table. At least one of the columns that it omits is constrained to be not null. Because the database server would have to insert a null value for every unmentioned column, it cannot perform this insert. Review the statement against the definition of the table. Possibly the definition of the table has been changed.
The test for a null value can be applied only to a column name (not to a subscripted character column or an expression, for example).
Review the use of these keywords in the WHERE clause and in any CASE statements.
This message does not apply to 8.21 and later 8.x database servers, which allow expressions as arguments of the IS [NOT] NULL operator.
In a grouping SELECT, you must list every nonaggregate column in the GROUP BY clause to ensure that a well-defined value exists for each selected column in each grouped row. A column contains either a single aggregate value or a value unique to that group. If a selected column were neither an aggregate nor in the list, two or more values for that column might possibly exist in some group, and the database server could not choose which value to display. Revise the query to include either the column name or its positional number in the clause.
Referential constraints cannot cross databases. In other words, both the referenced and referencing columns (or parent and child keys) must be in the same database.
The table that is specified in a referential constraint does not exist.
The database server cannot locate the referenced constraint in the sysconstraints system catalog table, and the referenced constraint was not created in the same ALTER TABLE statement as the referencing constraint. The referenced constraint might not exist, or a foreign key might refer to a table that has a unique constraint but not a primary-key constraint.
Check that you have entered a valid column name with the appropriate constraints that are associated with it. If the referenced table has a unique constraint but no primary key, you must use the following form of the REFERENCES clause:
REFERENCES table_name (column_name)
Valid constraint columns indicate an internal error. If the error recurs, note all circumstances and contact Informix Technical Support.
The clause WITH GRANT OPTION allows the receiver of the grant to grant the same privilege to others. In this case, the receiver of the grant is PUBLIC. If this statement were executed, everyone would have the privilege, and everyone could grant the privilege. This operation is prohibited. Either name specific grantees, or omit the clause WITH GRANT OPTION.
This GRANT statement includes your user id as one of the grantees. If you can grant the privilege, you already have the privilege. Rewrite the statement to omit your user name from the TO clause.