我创建了一个表作为:
CREATE TABLE SHOP.EMPLOYEES
(
EMPLOYEEID NUMBER(11) NOT NULL,
LASTNAME VARCHAR2(255 BYTE) DEFAULT NULL,
FIRSTNAME VARCHAR2(255 BYTE) DEFAULT NULL,
BIRTHDATE DATE DEFAULT NULL,
PHOTO VARCHAR2(255 BYTE) DEFAULT NULL,
NOTES VARCHAR2(100 BYTE) DEFAULT NULL
)
我有一个列notes
,它有100多个字符。所以,我尝试的是:
INSERT INTO shop.employees (EmployeeID, LastName, FirstName, BirthDate, Photo, Notes)
VALUES (1, 'Davolio', 'Nancy', '1968-12-08', 'EmpID1.pic', 'Education includes a BA in psychology from Colorado State University. She also completed (The Art of the Cold Call). Nancy is a member of Toastmasters International.')
但我得到了一个错误:
第1行出现错误
ORA-01861:文字与格式字符串不匹配
Oracle中那些长文本的最佳数据类型是什么?
1968-12-08
是字符串,您需要在表中插入日期。
无论何时使用日期,都需要将字符串转换为日期。
有两种方法可以将字符串转换为日期。
DATE '1968-12-08'
TO_DATE('1968-12-08', 'YYYY-MM-DD')
干杯!!
BIRTHDATE
是一个DATE,而不是varacar,因此需要将其转换为:
to_date('1968-12-08', 'yyyy-mm-dd')
很明显,你不能指望把300个字符长的东西放进接受100个字符的东西里,是吗?
但是,这不是你的问题。日期为。第4列为birthdate
,其数据类型为date
,但您正在其中插入一个字符串,因为'1968-12-08'
是一个字符串。您应该使用日期文字,即date '1968-12-08'
。
哦,是的,回到你最初的问题(尽管在这种情况下是错误的(:长文本的最佳数据类型。您可以创建一个数据类型为VARCHAR2(4000)
的列,它很乐意接受您使用的"长"字符串。或者,您甚至可以选择一个CLOB
,它最多可接受4 GB的字符;我想对你来说已经绰绰有余了。
最后,您的查询:
SQL> CREATE TABLE EMPLOYEES
2 (
3 EMPLOYEEID NUMBER(11) NOT NULL,
4 LASTNAME VARCHAR2(255 BYTE) DEFAULT NULL,
5 FIRSTNAME VARCHAR2(255 BYTE) DEFAULT NULL,
6 BIRTHDATE DATE DEFAULT NULL,
7 PHOTO VARCHAR2(255 BYTE) DEFAULT NULL,
8 NOTES VARCHAR2(100 BYTE) DEFAULT null
9 );
Table created.
请注意第4行中的日期文字以及第5行中的substr函数(将字符串长度限制为100(。
SQL> INSERT INTO employees
2 (EmployeeID, LastName, FirstName, BirthDate, Photo, Notes)
3 VALUES
4 (1, 'Davolio', 'Nancy', date '1968-12-08', 'EmpID1.pic',
5 substr('Education includes a BA in psychology from Colorado State University. She also completed (The Art of the Cold Call). Nancy is a member
of Toastmasters International.', 1, 100))
6 ;
1 row created.
SQL>
在这种情况下,我建议简单地将NOTES
列变大:
ALTER TABLE SHOP.EMPLOYEES
MODIFY (NOTES VARCHAR2(4000));
dbfiddle here
如果您需要比此更大的数据,可以使用CLOB
数据类型。