我们有两个表:Account和Client
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,数量为
)此过程为客户(NumCli)创建了一个具有第一笔余额(金额)的新帐户:
如果客户不存在,则错误。
我有一个序列:
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语句
10/81 PL / SQL:ORA-00984:此处不允许使用该列
由www.DeepL.com/Translator(免费版)翻译
答案 0 :(得分:1)
一些反对意见:
non_existent_client
异常?new
函数是什么?在Oracle中,我们使用sysdate
dbms_output
调用中的用法)insert
语句)时,不允许使用exception
名称)when others
没有用;我建议您将其删除。或者,如果您坚持要在raise
之后dbms_output
这看起来更好;它会真正编译,不知道,因为我没有您的表。
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 (Account_Number,
Client_Number,
OpeningDate,
Balance,
PRM)
VALUES (seqCompte.NEXTVAL,
NumCli,
TO_DATE (NOW (), 'DD.MM.YY'),
Amount,
PMVR);
END IF;
EXCEPTION
WHEN non_existent_client
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;