将Oracle中的SQLERRM(SQLCODE)转换为PostgreSQL



我正在将Oracle转换为PostgreSQL,我没有像Oracle在PostgreSQL中那样替代SQLERRM(SQLCODE(。

DECLARE
name employees.last_name%TYPE;
v_code NUMBER;
v_errm VARCHAR2(64);
BEGIN
SELECT last_name INTO name FROM employees WHERE employee_id = 1000;
EXCEPTION
WHEN OTHERS THEN
v_code := SQLERRM( SQLCODE );
v_errm := SUBSTR(SQLERRM, 1 , 64);
DBMS_OUTPUT.PUT_LINE('The error code is ' || v_code || '- ' || v_errm);
END;

查看文档:

在异常处理程序中,特殊变量SQLSTATE包含与引发的异常相对应的错误代码(有关可能的错误代码列表,请参阅表A.1(。特殊变量SQLERRM包含与异常相关联的错误消息。这些变量在异常处理程序外部未定义。

在异常处理程序中,还可以使用GET STACKED DIAGNOSTICS命令来检索有关当前异常的信息,该命令的格式为:

GET STACKED DIAGNOSTICSvariable{ = | := }item[ , ... ];

每个item是标识要分配给指定variable的状态值的关键字(该状态值应该是接收它的正确数据类型(。目前可用的状态项目如表43.2所示。

所以这可能是

v_code := SQLSTATE;
v_errm := substr(SQLERRM, 1, 64);