0

これは、実際の問題の一般的な形式です。サブヘッドに応じて金額を取得するために、列名を渡しています。

Officewisely のように、それぞれの年を持つ異なるサブ ヘッド フィールドのテーブルのテーブル 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;
/

なにか提案を ?

4

1 に答える 1

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;
于 2013-04-16T06:22:53.777 に答える