【问题标题】:Postgres alternatives for Oracle DBMS_UTILITY.FORMAT_CALL_STACK and DBMS_UTILITY.FORMAT_ERROR_STACKOracle DBMS_UTILITY.FORMAT_CALL_STACK 和 DBMS_UTILITY.FORMAT_ERROR_STACK 的 Postgres 替代品
【发布时间】:2020-10-30 05:50:29
【问题描述】:

Postgres for Oracle DBMS_UTILITY.FORMAT_CALL_STACKDBMS_UTILITY.FORMAT_ERROR_STACK 中相等/最接近的替代方案是什么?

【问题讨论】:

    标签: postgresql database-migration amazon-aurora ora2pg


    【解决方案1】:

    您可以使用GET DIAGNOSTICSGET STACKED DIAGNOSTICS 语句并读取PG_CONTEXT 字段。

    CREATE OR REPLACE FUNCTION outer_func() RETURNS integer AS $$
    BEGIN
      RETURN inner_func();
    END;
    $$ LANGUAGE plpgsql;
    
    CREATE OR REPLACE FUNCTION inner_func() RETURNS integer AS $$
    DECLARE
      stack text;
    BEGIN
      GET DIAGNOSTICS stack = PG_CONTEXT;
      RAISE NOTICE E'--- Call Stack ---\n%', stack;
      RETURN 1;
    END;
    $$ LANGUAGE plpgsql;
    
    SELECT outer_func();
    
    NOTICE:  --- Call Stack ---
    PL/pgSQL function inner_func() line 5 at GET DIAGNOSTICS
    PL/pgSQL function outer_func() line 3 at RETURN
    CONTEXT:  PL/pgSQL function outer_func() line 3 at RETURN
    outer_func
    ------------
            1
    (1 row)
    

    【讨论】:

    • 我可以为DBMS_UTILITY.FORMAT_ERROR_STACK 使用同样的方法吗?
    • Postgres 本身没有DBMS_UTILITY 包。您可以尝试安装orafce 扩展,该扩展具有此包的仿真。
    猜你喜欢
    • 2021-09-02
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    相关资源
    最近更新 更多