【问题标题】:How to use Select max and Insert together in pl sql如何在pl sql中一起使用Select max和Insert
【发布时间】:2016-06-07 10:02:42
【问题描述】:

我的目标是创建 PL/SQL 过程 EditRegion(par_ID int, par_Name varchar2) 如果 par_ID0 那么它应该(对于 REGIONS 中的现有语句,其中 REGION_ID=par_ID)使用 par_Name 中的值更新 REGION_NAME。

如果par_ID=0,我的其他方法应该是在REGIONS 中插入新的slog,其中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;
/

【问题讨论】:

  • 这个过程是否应该获取参数?看起来您没有填充 par_IDpar_Name
  • 不,它应该独立工作
  • 那么par_ID怎么会等于0呢? par_NAME 将如何获得任何价值?
  • 所以你认为我应该给它们添加一些值?
  • 您不介意吗?这些参数是NULL,直到您以某种方式填充它们。

标签: sql oracle plsql


【解决方案1】:
    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;
    /

【讨论】:

    【解决方案2】:

    猜猜这就是你要找的,

    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;
    /
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多