Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;PL/SQL:ORA-00984:此处不允许列“;从函数插入日期时出错_Sql_Oracle_Date_Plsql_Insert - Fatal编程技术网

&引用;PL/SQL:ORA-00984:此处不允许列“;从函数插入日期时出错

&引用;PL/SQL:ORA-00984:此处不允许列“;从函数插入日期时出错,sql,oracle,date,plsql,insert,Sql,Oracle,Date,Plsql,Insert,我使用以下SQL脚本使用PL/SQL用随机数据填充“Billings”表: DECLARE dgStartDate DATE; dgEndDate DATE; dgRandomDate DATE; FUNCTION getRandomDate(pStartDate IN DATE, pEndDate IN DATE) RETURN DATE IS dRandomDate DATE; piStart

我使用以下SQL脚本使用PL/SQL用随机数据填充“Billings”表:

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语句中的date部分,但date函数返回了正确的值。我不知道该怎么做


提前感谢

我相信您的错误是由于在
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;

看起来我们有不同的行号,哪一行是44?如果我这样做,随机日期函数在循环中就不起作用了。它在每28行中插入相同的日期。试图将其移动到循环中,但我得到:ORA-01843:无效month@DavidAdders我明白你现在想做什么;您希望循环的每个迭代都有一个新的随机日期。为什么不直接从
INSERT
语句调用自定义函数呢?感谢您的更新,刚刚尝试了一下,但得到了以下结果:PLS-00231:函数“GETRANDOMDATE”不能在SQL中使用;PL/SQL:ORA-00904::标识符无效。奇怪的是,您需要将函数
getRandomDate()
定义为独立函数。有关更多信息,请参阅。执行此操作后,错误应消失。