2016-06-07 2 views
0

Моя цель - создать PL/SQL-процедуру EditRegion (par_ID int, par_Name varchar2), где If par_ID <> 0, то он должен (для существующего оператора в REGIONS, где REGION_ID = par_ID) обновить REGION_NAME со значениями из par_Name.Как использовать Select max и Insert вместе в pl sql

и my else должно быть, если par_ID = 0, а затем вставить новый slog в REGIONS, где REGION_NAME = par_Name и номер REGION_ID, который для одного больше от самого большого REGION_ID в таблице. Я использую эту функцию max, которую я нашел где-то в Интернете, и я не уверен, как это исправить.

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

Guess это то, что вы ищете,

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; 
/
Смежные вопросы