如何查看变量的类型 PL/SQL?

是否有功能 PL / SQL, 显示作为函数的确切类型的变量 DUMP 在 SQL?

我试过了以下


DECLARE
l_variable INTEGER := 1;
BEGIN
DBMS_OUTPUT.PUT_LINE /DUMP /l_variable//;
END;


但它给出以下错误:

PLS-00204: 功能或伪卡车 'DUMP' 可以使用
只在运营商内 SQL
已邀请:

涵秋

赞同来自:

您可以使用此功能创建此功能
http://docs.oracle.com/cd/E118 ... NS022
. 但它不适用于匿名块,您需要将变量引用为字符串。


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

龙天

赞同来自:

您应该注意到,转储是一个重载的功能。 他有 3 超载。

因此,您可以在代码中模仿相同。


function myDump /x Varchar2/ return varchar2 is begin return/'string'/ ; end ;
function myDump /x number/ return varchar2 is begin return/'integer'/ ; end ;
function myDump /x date/ return varchar2 is begin return/'date'/ ; end ;


上面的代码可以不正确地工作,但应该让您了解如何应对这个问题。

我希望这将符合您的要求。

注意:您可以将这些功能放在包中并相应地使用它们。

石油百科

赞同来自:

declare
a number/10,3/;
type_info varchar2/400/;
begin
a := 55.5;
select dump/a/ into type_info from dual;
DBMS_OUTPUT.PUT_LINE/type_info/;
end;

要回复问题请先登录注册