sql - PLS-00201:必须声明标识符“ISDATE”
问题描述
以下是我的程序:
CREATE OR REPLACE PROCEDURE proc_InsertNewCustomer( IN_CustName IN VARCHAR,
IN_CustContact IN VARCHAR,
IN_DateOfBirth IN VARCHAR,
IN_CustAddress IN VARCHAR,
IN_PostalCode IN VARCHAR) AS
v_newCustID customer.customerID%TYPE;
v_newAddressID customeraddress.addressid%TYPE;
v_location number(5);
e_invalidDate exception;
e_invalidPostalCode exception;
BEGIN
IF (ISDATE(IN_DateOfBirth) = false) THEN
raise e_invalidDate;
ELSE
IF NOT EXISTS(SELECT locationid FROM location WHERE locationpostcode = IN_PostalCode) THEN
raise e_invalidPostalCode;
ELSE
v_location := locationid;
END IF;
END IF;
v_newCustID := 'C'||customerID.nextval;
v_newAddressID := addressid.nextval;
INSERT INTO customer values(v_newCustID, IN_CustName, IN_CustContact, TO_DATE(IN_DateOfBirth,'dd/mm/yyyy'));
INSERT INTO customeraddress values(TO_NUMBER(v_newAddressID, '999'), IN_CustAddress, v_location);
INSERT INTO addresslist values(TO_NUMBER(v_newAddressID, '999'), v_newCustID, 1);
DBMS_OUTPUT.PUT_LINE(chr(10));
DBMS_OUTPUT.PUT_LINE('New staff added successfully.');
DBMS_OUTPUT.PUT_LINE(chr(10));
DBMS_OUTPUT.PUT_LINE('Customer ID: '||v_newCustID);
DBMS_OUTPUT.PUT_LINE('Customer Name: '||IN_CustName);
DBMS_OUTPUT.PUT_LINE('Customer Contact: '||IN_CustContact);
DBMS_OUTPUT.PUT_LINE('Customer Birthday: '||IN_DateOfBirth);
DBMS_OUTPUT.PUT_LINE('Customer Address ID: '||v_newAddressID);
DBMS_OUTPUT.PUT_LINE('Customer Address: '||IN_CustAddress);
DBMS_OUTPUT.PUT_LINE('Postal Code: '||v_location);
EXCEPTION
WHEN e_invalidDate THEN
DBMS_OUTPUT.PUT_LINE('Invalid Input: Wrong Date of Birth input.');
WHEN e_invalidPostalCode THEN
DBMS_OUTPUT.PUT_LINE('Invalid Input: PostalCode does not exist.');
rollback;
END;
/
我得到了一些错误
14/4 PL/SQL: Statement ignored
14/8 PLS-00201: identifier 'ISDATE' must be declared
24/4 PL/SQL: Statement ignored
24/24 PLS-00201: identifier 'CUSTOMERID.NEXTVAL' must be declared
25/4 PL/SQL: Statement ignored
25/22 PLS-00201: identifier 'ADDRESSID.NEXTVAL' must be declared
我的客户 ID 将是:
C00001 C00002 C00003 ......
我的地址 ID 将是:
001
002
003
...
501
502
我想用 .nextval 和地址 id 增加 customerid,但我不知道该怎么做。寻求帮助。
解决方案
Oracle 没有ISDATE
检查字符串类型的功能。但是您可以编写自己的函数并使用它。例如:
function my_is_date( p_str in varchar2 ) return number
is
v_date date;
begin
v_date := to_date(p_str, 'dd.mm.yyyy');
return 1;
exception
when others then
return 0;
end;
推荐阅读
- kotlin - Kotlin RecyclerView 在数据更改后不更新
- excel - 如何使用Textjoin在Excel列中合并文本
- gcc - 如何使用内联汇编在控制寄存器 (cr0) 中设置一个位?
- tomcat - 如何配置 Tomcat 以接受根请求?
- javascript - 每当输入可观察值发生变化时,如何正确重新计算布尔值?
- javascript - Javascript热图本地问题
- r - 展开数据框列
- graph - 简单图数据库
- django - 如何在 django 管理面板中使用 django-auditlog 更改存储记录中的 tz
- javascript - 该文件不存在,但我仍然收到错误