【发布时间】:2014-12-16 10:31:50
【问题描述】:
我正在使用 SELECT 语句从我拥有的处方表中选择有冲突的治疗方法,并且我正在使用 IF 语句来检查所选数据与我在运行程序时输入的数据。我期望这个程序做的是不允许同一个客户在同一天预订相互冲突的治疗。但是当我运行我的程序时,我收到一个错误“精确提取返回的行数超过了请求的行数”。如果我自己运行 select 语句,它的工作原理如上所述。这是我的程序:
CREATE OR REPLACE PROCEDURE FPRESC (
FP_ID VARCHAR2,
FTREAT_ID VARCHAR2,
FCLIENT_ID VARCHAR2,
FDOC_ID VARCHAR2,
FP_DATE DATE)
AS
V_CLIENT_ID PRESCRIPTION.CLIENT_ID%TYPE;
V_CONFLICT TREATMENTS.CONFLICT%TYPE;
V_P_DATE PRESCRIPTION.P_DATE%TYPE;
V_TREAT_ID TREATMENTS.TREAT_ID%TYPE;
BEGIN
SELECT P.CLIENT_ID, T.CONFLICT, P.P_DATE, T.TREAT_ID
INTO V_CLIENT_ID, V_CONFLICT, V_P_DATE, V_TREAT_ID
FROM PRESCRIPTION P, TREATMENTS T
WHERE P.TREAT_ID=T.TREAT_ID
AND T.CONFLICT IS NOT NULL;
IF FP_DATE = V_P_DATE AND FCLIENT_ID = V_CLIENT_ID AND FTREAT_ID = V_TREAT_ID THEN
DBMS_OUTPUT.PUT_LINE('CONFLICT');
ELSE
INSERT INTO PRESCRIPTION (P_ID, TREAT_ID, CLIENT_ID, DOC_ID, P_DATE)
VALUES (FP_ID, FTREAT_ID, FCLIENT_ID, FDOC_ID, FP_DATE);
END IF;
END FPRESC;
/
以及我尝试为新处方输入的数据示例(注意:此数据有冲突,因此输入时应该会引发错误):
EXEC FPRESC ('P00011', 'T016', 'C00017', 'D006', '28-NOV-14');
如果可能的话,我们将不胜感激一些见解
【问题讨论】:
-
我强烈怀疑您的
select语句返回了多行。我不清楚你说的是否不正确。
标签: sql oracle stored-procedures