Oracle10g Oracle:检查变量的数据类型

Oracle10g Oracle:检查变量的数据类型,oracle10g,Oracle10g,如何在oracle 10g过程中检查变量是否为varchar/date/numeric数据类型? 我猜我在一个过程中有一个变量,它将被各种数据(可能是数字、字符串或日期)填充。如何在Oracle中找到这个变量的数据类型 Declare returnValue varchar2; Begin Text:=select col_name from tab_name where ID=:ID1; EXECUTE IMMEDIATE Text into returnValue; End; 此处“I

如何在oracle 10g过程中检查变量是否为varchar/date/numeric数据类型? 我猜我在一个过程中有一个变量,它将被各种数据(可能是数字、字符串或日期)填充。如何在Oracle中找到这个变量的数据类型

Declare
returnValue varchar2;

Begin
Text:=select col_name from tab_name where ID=:ID1;
EXECUTE IMMEDIATE  Text into returnValue;
End;
此处“ID1”将动态发送。“col_name”可以包含任何数据。 我必须检查“returnValue”变量中有什么样的值


请给出一些答案。

你可以这样做,但不是特别好:

    declare
    v_date DATE;
    v_number NUMBER

    begin
        select to_date(variable_name,<date_format>) into v_date from dual;

    exception when others then 
        //its not a date
        begin
          select to_date(variable_name,<date_format>) into v_number from dual;
        exception when others then 
          //its not a number
          ...
          ...
        end;
    end;
声明
v_日期;
v_编号
开始
选择to_date(变量名称,)从dual转换为v_date;
当其他人
//这不是约会
开始
从dual中选择to_date(变量名称)到v_number;
当其他人
//这不是一个数字
...
...
结束;
结束;

理想情况下,您不应该将多种类型的数据放在一个VARCHAR2列中—这样您就不会有这个问题。

您应该通过

returnvalue tablename.columnname%TYPE;
因此,通过这种方式,列的数据类型的值将存储在
returnvalue
变量中

更新1

returnValue tab_name.col_name%TYPE;

begin
select col_name into returnValue from tab_name where ID=:ID1;
return returnValue;
end;
更新2

您可以使用以下命令从以下命令获取数据类型

select data_type || '(' || data_length || ')' col from user_tab_columns where
TABLE_NAME = '<YOURTABLE>'
从用户选项卡的列中选择数据类型| |'(“| |数据长度| |')”列,其中
表名称=“”

查看声明?是否可能重复您希望在过程中创建变量?这些变量是定义的,或者你会动态创建它?@StevieG:“Varchar2”数据类型也可以有日期值,对吗?@Polppan:我定义的变量是“Varchar2”类型,但我用各种数据[日期,字符串]填充它。Polppan:你的意思是说“returnValue”将有数据类型存储在其中???如果是,那么我返回给它的数据呢?我也需要数据。什么是“tab_name.col_name%TYPE”?@user1495475
returnValue
将从col_name获取数据,也就是说,我们将
用于returnValue
:是“tab_name.col_name%TYPE”类型的数据类型声明吗?如果是,则会抛出类似“returnValue:invalid identifier”的错误@user1495475它正在声明一个数据类型为该列的变量。看看波尔潘:明白了.但很抱歉,表名,列名一直在变化。