Stored procedures 在需要数字的位置找到非数字字符?
我创建了一个带有一些约束的插入过程。已成功创建过程,但当我尝试插入Im-01858时:在需要数字的位置发现了一个非数字字符。这是我的密码Stored procedures 在需要数字的位置找到非数字字符?,stored-procedures,oracle11g,Stored Procedures,Oracle11g,我创建了一个带有一些约束的插入过程。已成功创建过程,但当我尝试插入Im-01858时:在需要数字的位置发现了一个非数字字符。这是我的密码 CREATE TABLE Customers ( IDNumber INTEGER PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50), DOB DATE, Gender CHAR(10) ); CREATE OR REPLACE PROCEDURE insertCustome
CREATE TABLE Customers
(
IDNumber INTEGER PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
DOB DATE,
Gender CHAR(10)
);
CREATE OR REPLACE PROCEDURE insertCustomer (id IN Integer, firstName IN varchar, lastName IN varchar, dob IN date, gender varchar)
AS
BEGIN
If sysdate between to_date('monday 08:00 am') and to_date('monday 05:00 pm')
or sysdate between to_date('tuesday 08:00 am') and to_date('tuesday 05:00 pm')
or sysdate between to_date('wednesday 08:00 am') and to_date('wednesday 05:00 pm')
or sysdate between to_date('thursday 08:00 am') and to_date('thursday 05:00 pm')
or sysdate between to_date('friday 10:00 am') and to_date('friday 01:00 pm')
then
INSERT INTO Customers values(id, firstName, lastName, dob, gender);
ELSE
raise_application_error(-20101, 'Can only insert during the week between normal business hours');
END if;
END insertCustomer
;
/
execute insertCustomer (18, 'Andre', 'Walker', '12-NOV-1993', 'male');
我已经被困了一段时间了。我确信在oracle中,日期格式是正确的。如能在
中插入客户价值观(id、名字、姓氏、出生日期、性别),将不胜感激
您试图将dob
作为char('1993年11月12日')插入,您需要将dob的插入值更改为insert-INTO-Customers值(id、firstName、lastName、to_-DATE(dob)、性别)
这应该就可以了
正如前面所指出的,您的截止日期('monday 08:00 am')
肯定是不正确的,并且会导致“Julian date”错误
这是一种不同的方式来做你尝试过的事情
IF TO_CHAR(sysdate, 'D') IN (1,2,3,4) AND TO_CHAR(sysdate, 'HH:MI am') BETWEEN '08:00 am' AND '05:00 pm' THEN
INSERT...
ELSIF TO_CHAR(sysdate, 'D') = 5 AND TO_CHAR(sysdate, 'HH:MI am') BETWEEN '10:00 am' AND '01:00 pm' THEN
INSERT...
ELSE
RAISE_APPLICATION_ERROR
END IF;
其中整数表示“一周中的某一天”,并且TO_CHAR(sysdate,'HH:MI am')
中的am根据sysdate的当前值自动更改为pm或am
编辑:请注意,我是欧洲人,通常使用24小时格式,因此我不知道am/pm将如何处理此问题(发布前只运行了一个小测试),这取决于您的测试。
到目前为止('friday 10:00 am')
几乎肯定无效,如果要工作,几乎肯定不会做您想要的事情。如果您碰巧正确设置了nls_date_格式
,它可能是有效的,但它不会解析到我猜您希望解析到的日期。因此,我如何修复sp以解决此问题取决于您尝试执行的操作。我不知道你为什么确定日期格式是正确的——这意味着你改变了nls\u date\u格式,而你在文章中没有提到。如果我只是定期插入,我没有问题,但在执行sp时我会出错。我基本上希望sp检查工作日的时间是否在上午8点到上午5点之间,如果不显示错误消息