环境信息:

数据库版本:hgdbv9.0.5

安装包名称:hgdbv9-05-0-0-5022-20251223-a09fff4-linux.x86_64.bin


场景描述:

ORACLE存储过程中存在$$PLSQL_UNIT,用来获取当前执行的存储过程的名字,目前V9-ORACLE模式不支持该语法,创建/编译的时候会报错,报错信息如下:

WARNING:  there was an compilation error
HINT: syntax error at or near "PLSQL_UNIT"

解决方案:

将 $$PLSQL_UNIT 修改为对应存储过程的名字大写;

ORACLE示例:

CREATE OR REPLACE PROCEDURE demo_plsql_unit_proc AS
v_user_name VARCHAR2(50);
BEGIN
DBMS_OUTPUT.PUT_LINE('开始执行程序单元: ' || $$PLSQL_UNIT);

v_user_name := 'Admin';
DBMS_OUTPUT.PUT_LINE(v_user_name || ' 正在操作...');

DECLARE
v_test NUMBER;
BEGIN
v_test := 1 / 0;
END;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('------------------------------------');
DBMS_OUTPUT.PUT_LINE('发生异常!');
DBMS_OUTPUT.PUT_LINE('错误源头对象: ' || $$PLSQL_UNIT);
DBMS_OUTPUT.PUT_LINE('错误详细信息: ' || SQLERRM);

END demo_plsql_unit_proc;
/

CALL demo_plsql_unit_proc();

修改为HGDBV9:

CREATE OR REPLACE PROCEDURE demo_plsql_unit_proc AS
v_user_name VARCHAR2(50);
BEGIN
DBMS_OUTPUT.PUT_LINE('开始执行程序单元: ' || 'DEMO_PLSQL_UNIT_PROC');

v_user_name := 'Admin';
DBMS_OUTPUT.PUT_LINE(v_user_name || ' 正在操作...');

DECLARE
v_test NUMBER;
BEGIN
v_test := 1 / 0;
END;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('------------------------------------');
DBMS_OUTPUT.PUT_LINE('发生异常!');
DBMS_OUTPUT.PUT_LINE('错误源头对象: ' || 'DEMO_PLSQL_UNIT_PROC');
DBMS_OUTPUT.PUT_LINE('错误详细信息: ' || SQLERRM);

END demo_plsql_unit_proc;
/