sql >> Database >  >> RDS >> Oracle

Hoe het type van een variabele in PL/SQL te bekijken?

U kunt deze functie maken met PL/Scope. Maar het werkt niet met anonieme blokken en je moet naar de variabele verwijzen als een tekenreeks.

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;
/

Voorbeeld:

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. Hoe u een lijst met alle controlebeperkingen in de SQL Server-database kunt krijgen - SQL Server / TSQL-zelfstudie, deel 85

  2. Een script genereren op basis van een diagram in MySQL Workbench

  3. sqldeveloper-foutbericht:netwerkadapter kan de verbindingsfout niet tot stand brengen

  4. Oracle PL/SQL - Verhoog de door de gebruiker gedefinieerde uitzondering met aangepaste SQLERRM