Oracle 在PLSQL中执行sql语句报 ORA-00911:无效字符如何解决?
原创约 1395 字大约 5 分钟...
40-Oracle 在PLSQL中执行sql语句报 ORA-00911:无效字符如何解决?.md
注意
本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。
报错截图

报错详情
如上图所示为sql语句在pl/sql中执行时的报错,sql语句如下
create table myLibary_book
(
book_id number(6) primary key,
book_name varchar2(40) not null,
lend_count number(3) not null,
status number(1) not null check(status in (0,1))---0表示借出,1表示在馆
);
经过我逐字逐字的排查虽然解决了问题但是依然不知道错在哪里,正确的sql语句如下
create table myLibary_book
(
book_id number(6) primary key,
book_name varchar2(40) not null,
lend_count number(3) not null,
status number(1) not null check(status in (0,1))---0表示借出,1表示在馆
);

这两sql语句鬼才看得出它们之间的有啥区别 反正就是一个不行一个行,无奈我之前写的统计字符的方法统计了一下它们之间的区别如下为统计区别
- 错误的sql语句统计结果如下:
该文本共有7行
该文本共有192个字符
其中包含:
8个汉字
121个字母,其中1个大写字母,120个小写字母
10个数字
53个其他字符
该文本共有212个字节
- 正确的的sql语句统计结果如下:
该文本共有7行
该文本共有191个字符
其中包含:
8个汉字
121个字母,其中1个大写字母,120个小写字母
10个数字
52个其他字符
该文本共有209个字节
可以看到正确的sql语句比错误的sql语句少了一个字符其它没啥区别
得出结论
如上分析可以得出结论造成这种原因多半是输入法的空格问题,正确应该使用英文的空格而使用了中文的空格,所以平时一定要特别注意,细心细心再细心,可省很多时间!!!!!!!!
分割线
相关信息
以上就是我关于 Oracle 在PLSQL中执行sql语句报 ORA-00911:无效字符如何解决? 知识点的整理与总结的全部内容,希望对你有帮助。。。。。。。
扩展知识
- 统计字符的方法
/**
* <p>Title: countNumOfWords</p>
* <p>
* Description: 统计文本的字数
* 可以细分到 汉字 多少 英文(大小写)多少 数据多少 其它字符多少 全文共多少字节
* </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company: www.baidudu.com</p>
* @param pathStr
* @author xianxian
* @date 2023年1月27日
* @version 1.0
*/
private static void countNumOfWords(String pathStr) {
try {// try代码块,当发生异常时会转到catch代码块中
// 读取指定的文件
if (pathStr == null || pathStr.equals("")) {
pathStr = System.getProperty("user.dir") + File.separator + "log.log";
}
// 创建类进行文件的读取,并指定编码格式为utf-8
InputStreamReader read = new InputStreamReader(new FileInputStream(pathStr), "utf-8");
BufferedReader in = new BufferedReader(read);// 可用于读取指定文件
String linDatastr = null;// 定义一个字符串类型变量linDatastr 用于存放一行的文本数据
String wordStr = null;// 定义一个字符串类型变量wordStr
int lineCount = 0, // 定义一个整型变量,用于统计行数
countWords = 0, // 定义整型变量,用于统计字符数
chineseWords = 0, upperWords = 0, lowerWords = 0, numberWords = 0, otherWords = 0,
allEnglishWords = 0, countBytes = 0;// 定义一个整型变量,用于统计字节数
while ((linDatastr = in.readLine()) != null) {// readLine()方法, 用于读取一行,只要读取内容不为空就一直执行
lineCount++;// 每循环一次就进行一次自增,用于统计文本行数
countWords += linDatastr.length();// 用于统计总字符数
byte[] bytes = linDatastr.getBytes();// 求出该行的字节数组
countBytes += bytes.length;// 用于统计总字节数
for (int j = 0; j < linDatastr.length(); j++) {// for循环的条件,当j小于该行长度时就一直循环并自增
wordStr = Character.toString(linDatastr.charAt(j));// 返回一个字符串对象
if (wordStr.matches("[\\u4e00-\\u9fa5]")) {// if语句的条件,判断是否为汉字
chineseWords++;// 若为汉字则c1自增
} else if (wordStr.matches("[A-Z]")) {// if语句的条件,判断是否为大写字母
upperWords++;// 若为大写字母则c2自增
} else if (wordStr.matches("[a-z]")) {// if语句的条件,判断是否为小写字母
lowerWords++;// 若为小写字母则c3自增
} else if (wordStr.matches("[0-9]")) {// if语句的条件,判断是否为数字
numberWords++;// 若为数字则c4自增
} else {// 否则可判断为其他字符
otherWords++;// 若为其他字符则c5自增
}
}
}
allEnglishWords = upperWords + lowerWords;// 统计总的字母数
in.close();// 关闭流
System.out.println("该文本共有" + lineCount + "行");// 输出总的行数
System.out.println("该文本共有" + countWords + "个字符");// 输出总的字符数
System.out.println("其中包含:");// 输出提示信息
System.out.println(chineseWords + "个汉字");// 输出汉字数
System.out.println(allEnglishWords + "个字母,其中" + upperWords + "个大写字母," + lowerWords + "个小写字母");// 输出字母数
System.out.println(numberWords + "个数字");// 输出数字数
System.out.println(otherWords + "个其他字符");// 输出其它字符数
System.out.println("该文本共有" + countBytes + "个字节");// 输出总的字节数
} catch (IOException e) {// 当try代码块有异常时转到catch代码块
e.printStackTrace();// printStackTrace()方法是打印异常信息在程序中出错的位置及原因
}
}
分割线
Powered by Waline v2.15.4