我试图在APPLICANT表中插入一行,并在新申请人具有相同的所有属性值时生成警告,但申请人编号(a#)作为申请人已经记录在表APPLICANT中。通过存储过程INSAPP的输入参数传递属性的值。
这是我的代码:
CREATE OR REPLACE PROCEDURE INSAPP(
a_num IN NUMBER,
a_fname IN VARCHAR,
a_lname IN VARCHAR,
a_address IN VARCHAR,
a_city IN VARCHAR,
a_state IN VARCHAR,
a_phone IN NUMBER,
a_fax IN NUMBER,
a_email IN VARCHAR,
a_acomment IN LONG) IS
app_row APPLICANT%ROWTYPE;
FAIL EXCEPTION;
BEGIN
--VERIFY APPLICANT FNAME
SELECT *
INTO app_row
FROM APPLICANT
WHERE fname = a_fname AND
lname = a_lname AND
address = a_address AND
city = a_city AND
state = a_state AND
phone# = a_phone AND
fax# = a_fax AND
email = a_email AND
acomment = a_acomment;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('CREATING APPLICANT');
BEGIN
SELECT MAX(a#)+1
INTO a_num
FROM APPLICANT;
INSERT INTO APPLICANT VALUES (a_num,a_fname,a_lname,a_address,a_city,a_state,a_phone,a_fax,a_email,a_acomment);
COMMIT;
DBMS_OUTPUT.PUT_LINE('APPLICANT HAS SUCCESSFULLY ADDED');
EXCEPTION
WHEN Fail THEN
ROLLBACK;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
ROLLBACK;
END;
END;
END INSAPP;
/
但是当我尝试使用此代码执行它时,它会给我一个像这样的错误消息
然后我试图展示错误: - 49/1 PLS-00103:遇到符号" END"
我是否对pl / sql代码有任何错误?请更正我,因为我还是pl / sql的新手。谢谢,非常感谢。 :)
答案 0 :(得分:0)
如果你从sqlplus执行它,请尝试
EXEC INSAPP ( 000001, 'PETER', 'JONES', '7 STATION ST.', 'PERTH', 'WA', 645278453, NULL, NULL, 'Job expectations ? Money, money, money, ...' );
或将其包装在begin .. end
块
begin
INSAPP ( 000001, 'PETER', 'JONES', '7 STATION ST.', 'PERTH', 'WA', 645278453, NULL, NULL, 'Job expectations ? Money, money, money, ...' );
end;
/
UPD。 我认为你的程序没有编译。
你不能改变输入参数a_num
的值(顺便说一下,最好不要为表获取新的id,使用序列)
SELECT MAX(a#)+1
INTO a_num
FROM APPLICANT;
END;
部分
rollback
语句后您有when
个必填项
由于比较空值总是返回false,因此按这种情况搜索记录是不好的
WHERE fname = a_fname AND
lname = a_lname AND
address = a_address AND
city = a_city AND
state = a_state AND
phone# = a_phone AND
fax# = a_fax AND
email = a_email AND
acomment = a_acomment;