sql >> データベース >  >> RDS >> Oracle

PL / SQLで変数のタイプを表示するにはどうすればよいですか?

    この関数は、PL/Scopeを使用して作成できます。ただし、匿名ブロックでは機能しないため、変数を文字列として参照する必要があります。

    create or replace function get_plsql_type_name
    (
        p_object_name varchar2,
        p_name varchar2
    ) return varchar2 is
        v_type_name varchar2(4000);
    begin
        select reference.name into v_type_name
        from user_identifiers declaration
        join user_identifiers reference
            on declaration.usage_id = reference.usage_context_id
            and declaration.object_name = reference.object_name
        where
            declaration.object_name = p_object_name
            and declaration.usage = 'DECLARATION'
            and reference.usage = 'REFERENCE'
            and declaration.name = p_name;
    
        return v_type_name;
    end;
    /
    

    例:

    alter session set plscope_settings = 'IDENTIFIERS:ALL';
    
    create or replace type my_weird_type is object
    (
        a number
    );
    
    create or replace procedure test_procedure is
        var1 number;
        var2 integer;
        var3 my_weird_type;
        subtype my_subtype is pls_integer range 42 .. 43;
        var4 my_subtype;
    begin
        dbms_output.put_line(get_plsql_type_name('TEST_PROCEDURE', 'VAR1'));
        dbms_output.put_line(get_plsql_type_name('TEST_PROCEDURE', 'VAR2'));
        dbms_output.put_line(get_plsql_type_name('TEST_PROCEDURE', 'VAR3'));
        dbms_output.put_line(get_plsql_type_name('TEST_PROCEDURE', 'VAR4'));
    end;
    /
    
    begin
        test_procedure;
    end;
    /
    
    NUMBER
    INTEGER
    MY_WEIRD_TYPE
    MY_SUBTYPE
    


    1. xp_cmdshellへの実行権限の取得

    2. Linux-PHP 7.0およびMSSQL(Microsoft SQL)

    3. リンクされたテーブルのリストをAccess2016からExcelにエクスポートする方法

    4. MySQL-テーブルの作成中に一緒に使用された場合のPRIMARYKEY、UNIQUE KEY、およびKEYの意味