我们有两张table:账户和客户
CREATE TABLE Client ( NumClient NUMBER(3) NOT NULL PRIMARY KEY,
ClientName VARCHAR (25) NOT NULL,
City VARCHAR (25) NOT NULL
);
CREATE TABLE Compte ( NumCompte NUMBER(1) NOT NULL PRIMARY KEY,
NumClient NUMBER(3) NOT NULL REFERENCES Client(NumClient),
DateOpening DATE NOT NULL,
balance FLOAT ,
PMVR NUMBER DEFAULT 0
);
程序如下:
OpenAccount(以数字表示的NumCli,以数字表示的Amount)
此过程为客户(NumCli)创建具有第一个余额(Amount)的新帐户:
- NumCaccount由序列自动分配;
- DateOpen是系统日期;
- 金额〉0;
- PMVR初始化为0;
如果客户不存在,则存在错误。
我有一个序列叫做:
CREATE SEQUENCE seqClient START WITH 101 INCREMENT BY 1;
CREATE SEQUENCE seqAccount START WITH 1 INCREMENT BY 1;
以下是程序文本
CREATE OR REPLACE PROCEDURE OpenAccount(NumCli IN NUMBER, Amount in NUMBER)
IS
non-existent_client EXCEPTION;
PRAGMA EXCEPTION_INIT (non-existent_client, -2291);
BEGIN
IF (Amount < 0)
THEN
RAISE_APPLICATION_ERROR (-20002,'the amount must be greater than 0');
ELSE
INSERT INTO Account (AccountNumber,
ClientNumber,
DateOpening date,
Balance,
PMVR)
VALUES (seqCount.NEXTVAL,
NumCli,
TO_DATE (sysdate,'DD.MM.YY'),
Amount,
0);
END IF;
EXCEPTION
WHEN
non-existent_customer
THEN
DBMS_OUTPUT.PUT_LINE (
Client No' ||| TO_CHAR (NumCli) ||| ' non-existent');
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE (
Oracle error:' |||| SQLCODE ||| '; Oracle message: ||||| SQLERRM);
END;
当我这样运行时
execute OpenAccount(101,1600);
我得到这个错误:
9/9 PL/SQL:已忽略SQL语句
1981年10月PL/SQL:ORA-00984:此处不允许列
用www.DeepL.com/Translator翻译(免费版)
1条答案
按热度按时间jhdbpxl91#
一些反对意见:
non_existent_client
异常?new
函数?在Oracle中,我们使用sysdate
dbms_output
调用中的用法)insert
语句)exception
名称)when others
是无用的;我建议您删除它。或者,如果您坚持,在dbms_output
之后立即删除raise
这个看起来更好;它会编译吗,不知道,因为我没有你的表