PL/SQL如何检查变量类型

PL/SQL如何检查变量类型,sql,database,oracle,plsql,Sql,Database,Oracle,Plsql,我需要有关我的简短PL/SQL的帮助: 我用“create of replace”完成了一个函数,它需要1个变量,除此之外,我想检查它是否是正确的变量类型: create or replace FUNCTION MYFunction(p_variable in BINARY_INTEGER) RETURN DATE PARALLEL_ENABLE IS not_number EXCEPTION; BEGIN IF p_variable NOT BINARY_INTEGER THEN

我需要有关我的简短PL/SQL的帮助: 我用“create of replace”完成了一个函数,它需要1个变量,除此之外,我想检查它是否是正确的变量类型:

create or replace FUNCTION MYFunction(p_variable in BINARY_INTEGER) RETURN DATE PARALLEL_ENABLE IS

not_number EXCEPTION;

BEGIN
  IF p_variable NOT BINARY_INTEGER
  THEN RAISE not_number
END IF;

EXCEPTION
...
END
这只是我函数的简化版本。正如您所看到的,我想检查给定变量的类型是否正确

或者是否有另一个基于oracle的异常已捕获此案例


谢谢你的帮助

如何重载一个函数,该函数将接收所有可能的(预期的)类型并返回一个描述相应类型的字符串

大概是这样的:

function f_variable_type (p_variable in BINARY_INTEGER) return varchar2
is
(
  return 'BINARY_INTEGER';

);

function f_variable_type(p_variable in varchar2) return varchar2
is
(
  return 'VARCHAR2';
);

function f_variable_type(p_variable in number) return varchar2
is
(
  return 'NUMBER';
);
(对于所有变量类型,依此类推)

然后在if语句中使用函数:

BEGIN
  IF f_variable_type(p_variable) !='BINARY_INTEGER'
  THEN RAISE not_number
END IF;

我相信,您会得到一个编译时错误。它确实可以编译,但没有我想要实现的异常处理。。这就是我需要帮助的地方,这是实际问题,如果使用无效变量从其他PLSql调用函数,如何处理异常。我不相信您可以从正在调用的函数/过程中处理异常。如果使用无法转换的数据类型传入参数,则无法在该函数/过程中运行任何代码。此外,我关心的是,为什么调用代码在传入参数之前不知道参数的数据类型。这就是拥有独立程序/功能的全部意义@F.Chrometz-我认为函数从未看到错误的类型;使用SQL类型(比如说
integer
),您可以获得一个非整数值并检查它();但是
binary\u integer
是一个变量,因此boneist说,如果不能隐式转换,调用时将失败,如果隐式转换,函数将看不到原始值或数据类型。PL/SQL类型检查在编译时完成。如果您试图传递的参数类型错误且无法转换,则会出现编译时错误。