2016-06-07 93 views
0

我的目标是创建PL/SQL过程EditRegion(par_ID int,par_Name varchar2)其中如果par_ID <> 0那么它应该(对于REGIONS中的现有语句,其中REGION_ID = par_ID)使用par_Name中的值更新REGION_NAME。如何在PL中使用Select max和Insert在一起sql

我的else应该是par_ID = 0,然后插入新的slog到REGIONS_NAME = par_Name的REGIONS和REGION_ID号码中,这个REGION_ID号码是表中最大的REGION_ID的一个更大的值。我正在使用这个最大功能,我在网上找到了一个地方,我不知道如何解决这个问题。

CREATE OR REPLACE PROCEDURE EditRegion 
AS 
par_ID int; 
par_Name VARCHAR2(10) ; 
REGION_ID : = SELECT MAX (REGION_ID),from REGIONS ; 
BEGIN 
if par_ID<>0 then 
UPDATE regions 
    SET REGION_NAME = par_NAME 
WHERE REGION_ID = par_ID ; 
else 
INSERT into REGIONS 
(REGION_ID,REGION_NAME) 
VALUES 
(REGION_NAME := par_NAME , 
REGION_ID := REGION_ID +1); 
END IF; 
END; 
/
+1

是这个程序应该得到的参数?看起来你没有填充'par_ID'和'par_Name' – sagi

+0

不,它应该独立工作 – Alex13

+0

那么'par_ID'如何等于0?以及'par_NAME'如何获得任何价值? – sagi

回答

0
CREATE OR REPLACE PROCEDURE EditRegion(par_NAME in VARCHAR2) 
    AS 
    par_ID int; 
    BEGIN 
SELECT MAX(REGION_ID) into par_ID from REGIONS ; 
    if par_ID<>0 then 
    UPDATE regions 
     SET REGION_NAME = par_NAME 
    WHERE REGION_ID = par_ID ; 
    else 
    INSERT into REGIONS 
    (REGION_ID,REGION_NAME) 
    VALUES 
    (par_NAME , 
    SELECT MAX(REGION_ID)+1 FROM regions); 
    END IF; 
    END; 
    /
0

想这是你在找什么,

CREATE OR REPLACE PROCEDURE EditRegion(
    par_ID INT, 
    par_Name VARCHAR2) 
AS 
    par_ID INT; 
    par_Name VARCHAR2(10); 
BEGIN 
    IF par_ID<>0 THEN 
    UPDATE regions SET REGION_NAME = par_NAME WHERE REGION_ID = par_ID ; 
    ELSE 
    INSERT 
    INTO REGIONS 
     (
     REGION_ID, 
     REGION_NAME 
    ) 
     VALUES 
     (
     par_NAME , 
     (SELECT MAX(REGION_ID)+1 FROM regions 
     ) 
    ); 
    END IF; 
END; 
/