[英]Inserting and checking data via stored procedure
我试图将新数据插入表中,同时根据其中一个表中的“冲突”属性检查是否有任何数据(处理)是否相互冲突。 我不太确定我的PL / SQL是否完全正确,但是当我尝试插入新数据时说“精确获取返回的行数超过请求的行数”时,我目前遇到错误。 我无法弄清楚这到底意味着什么。 我的程序:
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;
IF FP_DATE = V_P_DATE AND FCLIENT_ID = V_CLIENT_ID AND FTREAT_ID = V_TREAT_ID AND V_CONFLICT != NULL 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 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;
由于INTO子句,因此该选择应该只获取一条记录才能使逻辑起作用。由于出现错误,因为您的选择正在获取多于1行。 修正您的逻辑,它应该可以工作。
要继续使用@Shankar,您将拥有的连接返回表中的每一行。 您需要将结果过滤到特定行。 大概是这样的:
CREATE OR REPLACE PROCEDURE FPRESC (
FP_ID VARCHAR2,
FTREAT_ID VARCHAR2,
FCLIENT_ID VARCHAR2,
FDOC_ID VARCHAR2,
FP_DATE DATE)
AS
V_ROWCOUNT NUMBER;
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 COUNT(*)
INTO V_ROWCOUNT
FROM PRESCRIPTION P, TREATMENTS T
WHERE P.TREAT_ID=T.TREAT_ID
AND P.CLIENT_ID = FCLIENT_ID
AND P.P_DATE = FP_DATE
AND T.TREAT_ID = FTREAT_ID
AND V_CONFLICT != NULL;
IF (V_ROWCOUNT > 0) 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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.