程序添加了异常处理模块,但是捕获到错误后没有进行进一步处理,因此当执行到存储过程这一部分时,程序没有执行UPDATE操作,也没
今天帮同事调一个存储过程。存储过程比较长,问题出现在类似下面的一段代码上。
BEGIN
EXECUTE IMMEDIATE 'UPDATE '|| v_table_name || ' SET ' || v_column_name || ' = :column_value WHERE ID = :id'
USING V_COLUMN_VALUE, V_ID;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
程序添加了异常处理模块,但是捕获到错误后没有进行进一步处理,因此当执行到存储过程这一部分时,程序没有执行UPDATE操作,也没有报错。
首先,检查了UPDATE语句,似乎没有什么问题。于是在EXCEPTION模块中将SQLCODE和SQLERRM打印处理。
运行后得到的错误是:ORA-00911: 无效字符。
于是怀疑是传递的参数有问题,检查了v_table_name、v_column_name、V_COLUMN_VALUE和V_ID的值都没有问题。
只好将生成的UPDATE语句打印出来。检查了一下,也没有发现任何问题。
感觉十分奇怪,于是查了查Oracle的Error Reference:
ORA-00911 invalid character
Cause: Special characters are valid only in certain places. If special characters other than $, _, and # are used in a name and the name is not enclosed in double quotation marks ("), this message will be issued. One exception to this rule is for database names; in this case, double quotes are stripped out and ignored.
Action: Remove the invalid character from the statement or enclose the object name in double quotation marks.
似乎看上去是列名或表名中包含了不正确的字段,又仔细检查了一遍了生成的UPDATE语句的表名和列名,都是很平常的字母。
V_COLUMN_VALUE是个字符串,其中包含中文,会不会是由于当前环境对中文支持有问题。换了个环境测试,也没有问题。
仔细检查了数据库中的字段名和表名,确认不是以小写格式存放的。
又检查了一般输入的四个参数,,而且检查了它们的长度,已经是否存在不可见的字符。仍然没有任何收获。
不使用绑定变量,将四个参数都传入到字符串中,拼成完成的UPDATE语句。然后放到SQLPLUS中执行。居然仍然报错。
这时的UPDATE语句已经简单到下面的格式,仍然在报错。
SQL> UPDATE T SET NAME = '中文and1234' WHERE ID = 1;
UPDATE T SET NAME = '中文and1234' WHERE ID = 1
*
ERROR 位于第 1 行:
ORA-00911: 无效字符
最后终于发现,原来第一个等号“=”被同事敲成了中文的等号了。
郁闷,我们两个人调了将近一个小时,居然是这个错误。
本文永久更新链接地址:

MySQL uses a GPL license. 1) The GPL license allows the free use, modification and distribution of MySQL, but the modified distribution must comply with GPL. 2) Commercial licenses can avoid public modifications and are suitable for commercial applications that require confidentiality.

The situations when choosing InnoDB instead of MyISAM include: 1) transaction support, 2) high concurrency environment, 3) high data consistency; conversely, the situation when choosing MyISAM includes: 1) mainly read operations, 2) no transaction support is required. InnoDB is suitable for applications that require high data consistency and transaction processing, such as e-commerce platforms, while MyISAM is suitable for read-intensive and transaction-free applications such as blog systems.

In MySQL, the function of foreign keys is to establish the relationship between tables and ensure the consistency and integrity of the data. Foreign keys maintain the effectiveness of data through reference integrity checks and cascading operations. Pay attention to performance optimization and avoid common errors when using them.

There are four main index types in MySQL: B-Tree index, hash index, full-text index and spatial index. 1.B-Tree index is suitable for range query, sorting and grouping, and is suitable for creation on the name column of the employees table. 2. Hash index is suitable for equivalent queries and is suitable for creation on the id column of the hash_table table of the MEMORY storage engine. 3. Full text index is used for text search, suitable for creation on the content column of the articles table. 4. Spatial index is used for geospatial query, suitable for creation on geom columns of locations table.

TocreateanindexinMySQL,usetheCREATEINDEXstatement.1)Forasinglecolumn,use"CREATEINDEXidx_lastnameONemployees(lastname);"2)Foracompositeindex,use"CREATEINDEXidx_nameONemployees(lastname,firstname);"3)Forauniqueindex,use"CREATEU

The main difference between MySQL and SQLite is the design concept and usage scenarios: 1. MySQL is suitable for large applications and enterprise-level solutions, supporting high performance and high concurrency; 2. SQLite is suitable for mobile applications and desktop software, lightweight and easy to embed.

Indexes in MySQL are an ordered structure of one or more columns in a database table, used to speed up data retrieval. 1) Indexes improve query speed by reducing the amount of scanned data. 2) B-Tree index uses a balanced tree structure, which is suitable for range query and sorting. 3) Use CREATEINDEX statements to create indexes, such as CREATEINDEXidx_customer_idONorders(customer_id). 4) Composite indexes can optimize multi-column queries, such as CREATEINDEXidx_customer_orderONorders(customer_id,order_date). 5) Use EXPLAIN to analyze query plans and avoid

Using transactions in MySQL ensures data consistency. 1) Start the transaction through STARTTRANSACTION, and then execute SQL operations and submit it with COMMIT or ROLLBACK. 2) Use SAVEPOINT to set a save point to allow partial rollback. 3) Performance optimization suggestions include shortening transaction time, avoiding large-scale queries and using isolation levels reasonably.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

WebStorm Mac version
Useful JavaScript development tools

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SublimeText3 Linux new version
SublimeText3 Linux latest version

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

SublimeText3 Mac version
God-level code editing software (SublimeText3)
