我有以下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语句内的日期部分,但日期函数返回正确的值。我不知道如何让它发挥作用。
提前致谢
答案 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;