Oracle兼容-函数-SQLCODE()/SQLERRM()函数


1. 语法

1. SQLCODE()

3. SQLERRM()

5. SQLERRM( errcode )

2. 定义和用法

SQLCODE() 函数的作用是返回错误号与错误信息,与 exception 配合使用。

SQLERRM() 函数的作用是返回指定错误代码的错误信息,主要用法有以下几个:

  1. 运行 SQLERRM() 获取上一次发生错误的信息,与 exception 配合使用。
  2. 运行 SQLERRM(sqlcode) 获取错误信息,如果指定的错误号与当前错误一致,则返回完整的错误信息。
  3. 运行 SQLERRM(sqlcode) 获取错误信息,如果指定的错误号与当前错误不一致,则返回指定错误号对应的错误信息(可能存在占位符)。

3. Oracle兼容说明

SQLCODE() 返回的是GreatSQL中原生定义的错误号,不是Oracle的错误号。

当运行的SQL或函数没有报错时,没有异常被触发,则返回值为 0。

SQLCODE() 必须在存储过程中或函数中使用,不能单独使用。

SQLERRM() 返回的是GreatSQL中原生定义的错误信息,如果指定了不存在的错误信息,则返回 errcode: Unknown error。

4. 示例

1. -- 先切换到Oracle mode
2. greatsql> SET sql_mode = ORACLE;

4. -- 修改DELIMITER
5. greatsql> DELIMITER //

7. -- 查询一个不存在的表t1
8. -- 第一次执行时未报错 SQLCODE = 0;
9. -- SQLERRM 不指定 SQLCODE,返回最近一次发生的错误
10. -- SQLERRM 中指定 SQLCODE,仍是返回最近一次发生的错误
11. -- SQLERRM 中指定自定义的 SQLCODE,返回对应的错误信息(不是最近一次发生的错误)
12. greatsql> BEGIN
13. SELECT SQLCODE, SQLERRM;
14. SELECT * FROM t1;
15. EXCEPTION
16. WHEN OTHERS THEN
17. SELECT 'errcode:' || SQLCODE ||' msg:' || SQLERRM AS ret1;
18. SELECT 'errcode:' || SQLCODE ||' msg:' || SQLERRM AS ret2;
19. SELECT 'errcode:' || SQLCODE ||' msg:' || SQLERRM AS ret3;
20. END; //
21. +---------+-----------------------------------+
22. | SQLCODE | SQLERRM                           |
23. +---------+-----------------------------------+
24. |       0 | 0 : normal, successful completion |
25. +---------+-----------------------------------+
26. 1 row in set (0.00 sec)

28. +-----------------------------------------------------------+
29. | ret1                                                      |
30. +-----------------------------------------------------------+
31. | errcode:1146 msg:1146 : Table 'greatsql.t1' doesn't exist |
32. +-----------------------------------------------------------+
33. 1 row in set (0.00 sec)

35. +-----------------------------------------------------------+
36. | ret2                                                      |
37. +-----------------------------------------------------------+
38. | errcode:1146 msg:1146 : Table 'greatsql.t1' doesn't exist |
39. +-----------------------------------------------------------+
40. 1 row in set (0.00 sec)

42. +-----------------------------------------------------------+
43. | ret3                                                      |
44. +-----------------------------------------------------------+
45. | errcode:1146 msg:1146 : Table 'greatsql.t1' doesn't exist |
46. +-----------------------------------------------------------+
47. 1 row in set (0.00 sec)

50. -- 在最开始自行制定SQLCODE不影响后续获取真正的SQLCODE
51. greatsqal> BEGIN
52. SELECT SQLERRM(105400) ;
53. SELECT SQLCODE, SQLERRM;
54. SELECT * FROM t1;
55. EXCEPTION
56. WHEN OTHERS THEN
57. SELECT 'errcode:' || SQLCODE ||' msg:' || SQLERRM AS ret1;
58. END; //
59. +------------------------+
60. | SQLERRM(105400)        |
61. +------------------------+
62. | 105400 : Unknown error |
63. +------------------------+
64. 1 row in set (0.00 sec)

66. +---------+-----------------------------------+
67. | SQLCODE | SQLERRM                           |
68. +---------+-----------------------------------+
69. |       0 | 0 : normal, successful completion |
70. +---------+-----------------------------------+
71. 1 row in set (0.00 sec)

73. +-----------------------------------------------------------+
74. | ret1                                                      |
75. +-----------------------------------------------------------+
76. | errcode:1146 msg:1146 : Table 'greatsql.t1' doesn't exist |
77. +-----------------------------------------------------------+
78. 1 row in set (0.00 sec)

问题反馈

联系我们

扫码关注微信公众号

greatsql-wx