【问题标题】:Oracle:Check datatype of a variableOracle:检查变量的数据类型
【发布时间】:2012-11-20 23:30:15
【问题描述】:

如何在 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”变量中有什么样的值。?

请提出一些答案。

【问题讨论】:

  • 看看声明?
  • 您想在过程中创建一个变量吗?并且这些变量是定义的,或者您将动态创建它?
  • @StevieG:"Varchar2" 数据类型也可以有日期值,对吗?
  • @Polppan:我定义的变量是“Varchar2”类型,但我用各种数据[日期,字符串]填充它。

标签: oracle10g


【解决方案1】:

你可以做这样的事情,有点不太好:

    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;

理想情况下,您不应该将多种类型的数据放入单个 VARCHAR2 列中,否则您一开始就不会有这个问题..

【讨论】:

    【解决方案2】:

    您应该通过

    声明column_name
    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>'
    

    【讨论】:

    • Polppan:你的意思是说“returnValue”会存储数据类型???如果是,我返回的数据呢?我也想要数据。什么是“tab_name.col_name” %TYPE"?
    • @user1495475 returnValue 将拥有来自 col_name 的数据,即我们使用 into returnValue
    • :“tab_name.col_name%TYPE”是一种数据类型声明吗?如果是,那不起作用,它会抛出类似“returnValue: invalid identifier”这样的错误。
    • @user1495475 它正在声明一个具有该列数据类型的变量。看看this
    • Polppan:知道了。但是我很抱歉,表名,列名一直在变化。
    猜你喜欢
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 2012-03-24
    相关资源
    最近更新 更多