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


1. 语法

  1. SQLCODE()
  2. SQLERRM()
  3. 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;
  3. -- 修改DELIMITER
  4. greatsql> DELIMITER //
  5. -- 查询一个不存在的表t1
  6. -- 第一次执行时未报错 SQLCODE = 0;
  7. -- SQLERRM 不指定 SQLCODE,返回最近一次发生的错误
  8. -- SQLERRM 中指定 SQLCODE,仍是返回最近一次发生的错误
  9. -- SQLERRM 中指定自定义的 SQLCODE,返回对应的错误信息(不是最近一次发生的错误)
  10. greatsql> BEGIN
  11. SELECT SQLCODE, SQLERRM;
  12. SELECT * FROM t1;
  13. EXCEPTION
  14. WHEN OTHERS THEN
  15. SELECT 'errcode:' || SQLCODE ||' msg:' || SQLERRM AS ret1;
  16. SELECT 'errcode:' || SQLCODE ||' msg:' || SQLERRM AS ret2;
  17. SELECT 'errcode:' || SQLCODE ||' msg:' || SQLERRM AS ret3;
  18. END; //
  19. +---------+-----------------------------------+
  20. | SQLCODE | SQLERRM |
  21. +---------+-----------------------------------+
  22. | 0 | 0 : normal, successful completion |
  23. +---------+-----------------------------------+
  24. 1 row in set (0.00 sec)
  25. +-----------------------------------------------------------+
  26. | ret1 |
  27. +-----------------------------------------------------------+
  28. | errcode:1146 msg:1146 : Table 'greatsql.t1' doesn't exist |
  29. +-----------------------------------------------------------+
  30. 1 row in set (0.00 sec)
  31. +-----------------------------------------------------------+
  32. | ret2 |
  33. +-----------------------------------------------------------+
  34. | errcode:1146 msg:1146 : Table 'greatsql.t1' doesn't exist |
  35. +-----------------------------------------------------------+
  36. 1 row in set (0.00 sec)
  37. +-----------------------------------------------------------+
  38. | ret3 |
  39. +-----------------------------------------------------------+
  40. | errcode:1146 msg:1146 : Table 'greatsql.t1' doesn't exist |
  41. +-----------------------------------------------------------+
  42. 1 row in set (0.00 sec)
  43. -- 在最开始自行制定SQLCODE不影响后续获取真正的SQLCODE
  44. greatsqal> BEGIN
  45. SELECT SQLERRM(105400) ;
  46. SELECT SQLCODE, SQLERRM;
  47. SELECT * FROM t1;
  48. EXCEPTION
  49. WHEN OTHERS THEN
  50. SELECT 'errcode:' || SQLCODE ||' msg:' || SQLERRM AS ret1;
  51. END; //
  52. +------------------------+
  53. | SQLERRM(105400) |
  54. +------------------------+
  55. | 105400 : Unknown error |
  56. +------------------------+
  57. 1 row in set (0.00 sec)
  58. +---------+-----------------------------------+
  59. | SQLCODE | SQLERRM |
  60. +---------+-----------------------------------+
  61. | 0 | 0 : normal, successful completion |
  62. +---------+-----------------------------------+
  63. 1 row in set (0.00 sec)
  64. +-----------------------------------------------------------+
  65. | ret1 |
  66. +-----------------------------------------------------------+
  67. | errcode:1146 msg:1146 : Table 'greatsql.t1' doesn't exist |
  68. +-----------------------------------------------------------+
  69. 1 row in set (0.00 sec)

问题反馈

联系我们

扫码关注微信公众号

greatsql-wx