动态列名称抛出ORA-01722:无效的数字

时间:2013-04-16 06:07:20

标签: sql database oracle plsql oracle10g

这是我实际问题的通用格式。我传递一个列名,以便根据子头获取金额。

让我们假设表格XYZ用于不同子头字段的表格,其各自的年份在办公室中像

id, office_id, subhead1, subhead2, subhead3, year

现在,正在发生的是参数test_column_name无效。当我在那里手动放置一些字段时,它工作正常。我抛出错误:

"ORA-01722:invalid number"

我的功能如下:

CREATE OR REPLACE FUNCTION TEST_FUNCTION  (test_column_name in varchar)
RETURN float
IS
    AMOUNT float;
BEGIN    
    SELECT 
    SUM(AMOUNT) INTO AMOUNT FROM TEST_TABLE
    where
    TEST_FIELD IN 
        (
            SELECT DISTINCT test_column_name FROM XYZ_TABLE WHERE XYZ_YEAR='2012'
        );  
    return AMOUNT;    
END TEST_FUNCTION;
/

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

我认为你不能直接将'test_column_name'放入SQL中。你应该使用动态Sql。

  EXECUTE IMMEDIATE 'SELECT SUM(AMOUNT) FROM TEST_TABLE  WHERE TEST_FIELD IN (SELECT DISTINCT  '||test_column_name||' FROM XYZ_TABLE WHERE XYZ_YEAR=''2012'')'
        INTO AMOUNT;