" PL / SQL:ORA-00984:此处不允许列"从函数插入日期时出错

时间:2016-06-10 05:15:22

标签: sql oracle date plsql insert

我有以下SQL脚本来填充比林斯'使用PL / SQL的随机数据表:

DECLARE
    dgStartDate     DATE;
    dgEndDate       DATE;
    dgRandomDate    DATE;

FUNCTION getRandomDate(pStartDate IN DATE, pEndDate IN DATE) RETURN DATE
    IS
        dRandomDate     DATE;
        piStartNumber   PLS_INTEGER;
        piEndNumber     PLS_INTEGER;
    BEGIN
        piStartNumber := TO_NUMBER(TO_CHAR(pStartDate, 'J'));
        piEndNumber := TO_NUMBER(TO_CHAR(pEndDate, 'J'));

        dRandomDate := TO_DATE(TRUNC(DBMS_RANDOM.VALUE(piStartNumber, piEndNumber)), 'J');

        RETURN dRandomDate;
    END;

BEGIN
    dgStartDate := TO_DATE('01/01/2012', 'DD/MM/YYYY');
    dgEndDate := TO_DATE('31/12/2015', 'DD/MM/YYYY');

    dgRandomDate := getRandomDate(dgStartDate, dgEndDate);
FOR loop_counter IN 1..28 LOOP
INSERT INTO billings(id_billing, id_account, total_billing, due_billing)
VALUES (loop_counter, '123456', round(DBMS_RANDOM.VALUE(0,2000),2), TO_CHAR(dRandomDate, 'DD/MM/YYYY'));
END LOOP;
COMMIT;
END;

我收到以下错误:

ORA-06550: line 45, column 76:
PL/SQL: ORA-00984: column not allowed here
ORA-06550: line 44, column 1:
PL/SQL: SQL Statement ignored

错误位于INSERT语句内的日期部分,但日期函数返回正确的值。我不知道如何让它发挥作用。

提前致谢

1 个答案:

答案 0 :(得分:1)

我认为您的错误是由于INSERT语句中意外使用错误的变量名造成的:如果仔细观察,您会注意到您声明了一个名为dgRandomDate的变量:

dgRandomDate := getRandomDate(dgStartDate, dgEndDate);

但是,这是您在INSERT声明中传递的内容:

TO_CHAR(dRandomDate, 'DD/MM/YYYY')

您可能打算这样做:

TO_CHAR(dgRandomDate, 'DD/MM/YYYY')

<强>更新

我没有看到在INSERT语句中调用用户定义函数有什么问题,所以试试这样做:

BEGIN

FOR loop_counter IN 1..28 LOOP
INSERT INTO billings(id_billing, id_account, total_billing, due_billing)
VALUES (loop_counter, '123456', round(DBMS_RANDOM.VALUE(0,2000),2),
        TO_CHAR(getRandomDate(TO_DATE('01/01/2012', 'DD/MM/YYYY'),
                              TO_DATE('31/12/2015', 'DD/MM/YYYY')), 'DD/MM/YYYY'));
END LOOP;
COMMIT;
END;