【发布时间】:2015-05-24 00:31:08
【问题描述】:
在 Oracle SQL developer 11g 中,我尝试生成一个随机日期,将其分配给一个变量,然后插入到一个表中。日期生成+分配给变量代码(工作正常):
DECLARE
Launch_date DATE;
BEGIN
Launch_date:=TO_DATE(TRUNC(
DBMS_RANDOM.value(
TO_CHAR(date '2000-01-01','J')
,TO_CHAR(date '2015-01-01','J')
)),'J');
END;
尝试将其插入表时,我收到以下错误消息:
Error starting at line : 214 in command -
EXECUTE INSERT_DATA(15)
Error report -
ORA-01841: (full) year must be between -4713 and +9999, and not be 0
ORA-06512: at "KALVAITYTE_INGRIDA.INSERT_DATA", line 43
ORA-06512: at line 1
01841. 00000 - "(full) year must be between -4713 and +9999, and not be 0"
*Cause: Illegal year entered
*Action: Input year in the specified range
这是完整的代码:
DROP TABLE ACCEPT_RESULT;
DROP TABLE DOCUMENTS;
DROP TABLE STUDENT;
DROP TABLE NEW_TABLE;
DROP SEQUENCE S_ACCEPT;
DROP SEQUENCE S_DOC;
DROP SEQUENCE S_STUD;
CREATE TABLE STUDENT
(ID_STUDENT NUMBER PRIMARY KEY,
F_NAME VARCHAR2(20),
L_NAME VARCHAR2(20),
BORN_DATE DATE
);
CREATE TABLE DOCUMENTS
(
DOC_ID NUMBER PRIMARY KEY,
ENTERED DATE,
FINISHED DATE,
ID_STUDENT NUMBER REFERENCES STUDENT(ID_STUDENT)
);
CREATE TABLE ACCEPT_RESULT
(DETAIL_ID NUMBER PRIMARY KEY,
UNIVERSITY_NAME VARCHAR2(50),
FACULTY_NAME VARCHAR2(30),
DOC_ID NUMBER REFERENCES DOCUMENTS(DOC_ID)
);
CREATE TABLE NEW_TABLE
(
F_NAME VARCHAR2(20),
L_NAME VARCHAR2(20),
UNIVERSITY VARCHAR2(50),
FACULTY_NAME VARCHAR2(30)
);
INSERT INTO NEW_TABLE VALUES ('AGNĖ', 'AGNAITĖ', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('INGRIDA', 'INGRIDAITĖ', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('ANTANAS', 'ANTANAITIS', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('BRONIUS', 'BRONEVIČIUS', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('LIEPA', 'LIEPAITĖ', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('AGNĖ', 'TAUTAVIČIŪTĖ', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('ILONA', 'ŠILAITĖ', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('AKVILĖ', 'GEDRIMAITĖ', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('ANDRIUS', 'STONKUS', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('GRETA', 'GRETAITĖ', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('KASPARAS', 'NACIUS', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('ROKAS', 'DARGEVIČIUS', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('JUSTINAS', 'ENGELAITIS', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('VALIUS', 'DUMBRAUSKAS', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('EDGARAS', 'GVOZDAS', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('ANTANAS', 'JASAITIS', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('LINAS', 'STARKUTIS', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('AURIMAS', 'GEDMINTAS', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('LINAS', 'LINAITIS', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('LINAS', 'LINELIS', 'KLAIPĖDA STATE UNIVERSITY OF APPLIED SCIENCES', 'TECHNOLOGY');
INSERT INTO NEW_TABLE VALUES ('KRŪMAS', 'TADAS', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Mėlynas', 'Tadas', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Raudonas', 'Tomas', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Žalias', 'Karolis', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Geltonas', 'Robertas', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Oranžinis', 'Rokas', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Juodas', 'Justinas', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Pilkas', 'Ignas', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Dariauskas', 'Darius', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Kairys', 'Jurgis', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Dešinytė', 'Rūta', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Vyšniauskas', 'Petras', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Siemaitė', 'Aurelija', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Girtauskaitė', 'Ieva', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Piemenaitis', 'Audrius', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Grybas', 'Karolis', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Ekranavičius', 'Tomas', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Klavauskas', 'Antanas', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Žiurkytė', 'Sandra', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Kaleimauskas', 'Domas', 'KLAIPĖDA UNIVERSITY', 'SOCIAL');
INSERT INTO NEW_TABLE VALUES ('Blaivevičius', 'Haroldas', 'KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Pelytė', ' Aušra','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Meškaitė', ' Viktorija','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Vilkas', ' Kęstas','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Krūmas', ' Arūnas','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Medis', ' Artūras','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Obuolaitė', 'Ingrida','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Gaidauskienė', 'Eglė','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Žuvienė', 'Monika','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Morkavičius', 'Tadas','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Dešrytė', 'Kornelija','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Sūris', 'Aurimas','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Bandelė', 'Greta','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Rūkavičius', 'Edgaras','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Kreivauskas', 'Mantas','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Aklaitė', 'Diana','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Nekalbys', 'Rytis','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Telefonas', 'Deividas','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Lentaitė', 'Gabija','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('Viniauskas', 'Hermanas','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
INSERT INTO NEW_TABLE VALUES ('MALKA', 'TOMAS','KAUNAS UNIVERSITY OF TECHNOLOGY', 'MEDICINE');
CREATE SEQUENCE S_STUD;
CREATE SEQUENCE S_DOC;
CREATE SEQUENCE S_ACCEPT;
CREATE OR REPLACE PROCEDURE INSERT_DATA(HOW_MANY_RECORDS NUMBER) IS
BEGIN
/*
1 TABLE STUDENT
*/
FOR I IN 1..HOW_MANY_RECORDS LOOP
DECLARE
F_NAME_VALUE VARCHAR2(20);
BEGIN
SELECT F_NAME INTO F_NAME_VALUE
FROM
(SELECT F_NAME FROM NEW_TABLE
ORDER BY dbms_random.value)
WHERE rownum = 1;
END;
DECLARE
L_NAME_VALUE VARCHAR2(20);
BEGIN
SELECT L_NAME INTO L_NAME_VALUE
FROM
(SELECT L_NAME FROM NEW_TABLE
ORDER BY dbms_random.value)
WHERE rownum = 1;
END;
DECLARE
BORN_DATE_VALUE DATE;
BEGIN
BORN_DATE_VALUE :=TO_DATE(TRUNC(
DBMS_RANDOM.value(
TO_CHAR(date '1870-01-01','J')
,TO_CHAR(date '1995-01-01','J')
)),'J');
END;
INSERT INTO STUDENT(ID_STUDENT,F_NAME,L_NAME,BORN_DATE)
VALUES (S_STUD.NEXTVAL,F_NAME_VALUE,L_NAME_VALUE, BORN_DATE_VALUE);
-------------------------------------------------------------------
/*
2 TABLE DOCUMENTS
*/
DECLARE
ENTERED_DATE_VALUE DATE;
BEGIN
ENTERED_DATE_VALUE :=TO_DATE(TRUNC(
DBMS_RANDOM.value(
TO_CHAR(date '1870-01-01','J')
,TO_CHAR(date '1995-01-01','J')
)),'J');
END;
DECLARE
FINISHED_DATE_VALUE DATE;
BEGIN
FINISHED_DATE_VALUE :=TO_DATE(TRUNC(
DBMS_RANDOM.value(
TO_CHAR(date '1870-01-01','J')
,TO_CHAR(date '1995-01-01','J')
)),'J');
END;
INSERT INTO DOCUMENTS(DOC_ID,ENTERED, FINISHED, ID_STUDENT)
VALUES(S_DOC.NEXTVAL,ENTERED_DATE_VALUE, FINISHED_DATE_VALUE, S_STUD.CURRVAL);
------------------------------------------------------------------
/*
3 TABLE ACCEPTANCE
*/
DECLARE
UNIVERSITY_NAME_VALUE VARCHAR2(50);
BEGIN
SELECT UNIVERSITY INTO UNIVERSITY_NAME_VALUE
FROM
(SELECT UNIVERSITY FROM NEW_TABLE
ORDER BY dbms_random.value)
WHERE rownum = 1;
END;
DECLARE
FACULTY_NAME_VALUE VARCHAR2(30);
BEGIN
SELECT FACULTY_NAME INTO FACULTY_NAME_VALUE
FROM
(SELECT FACULTY_NAME FROM NEW_TABLE
ORDER BY dbms_random.value)
WHERE rownum = 1;
END;
INSERT INTO ACCEPT_RESULT(DETAIL_ID,UNIVERSITY_NAME,FACULTY_NAME,DOC_ID)
VALUES (S_ACCEPT.NEXTVAL,UNIVERSITY_NAME_VALUE, FACULTY_NAME_VALUE, S_DOC.CURRVAL);
END LOOP;
END;
/
EXECUTE INSERT_DATA(15);
我在这里错过了什么?
【问题讨论】:
-
您是否与
SELECT核对过一年的示例? -
我尝试将变量输出到控制台。工作得很好。示例输出:
2007.05.21 -
使用
.分隔符,这看起来不像是有效的日期格式。 -
发布的代码有一些严重的范围问题,它肯定不会为我编译。例如,“F_NAME_VALUE”在程序第 11 行的块中声明,包含该变量的块在第 19 行结束;但是,
F_NAME_VALUE在第 44 行再次使用。显然代码在使用后但在此处发布之前已更改。对该问题的编辑历史的检查似乎证实了这一点。请发布将编译的代码。谢谢。 -
当我发现我在
INSERT语句中使用字符串而不是变量时发现了一个愚蠢的错误,代码被更改了。请检查修订版中的并排降价。除此之外,你是说我不能在INSERT语句中使用我的变量吗?我应该如何声明我的变量,为它们赋值,然后将这些值插入到表中?