如何在pl sql中一起使用Select max和Insert

Posted

技术标签:

【中文标题】如何在pl sql中一起使用Select max和Insert【英文标题】:How to use Select max and Insert together in pl sql 【发布时间】: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,直到您以某种方式填充它们。 【参考方案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;
/

【讨论】:

以上是关于如何在pl sql中一起使用Select max和Insert的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PL/SQL 中使用 select 语句为 SQL*Plus 变量赋值?

将PL / SQL块与交互式网格一起使用(Oracle Apex)

PL/SQL中SELECT总结

如何存储 select 语句的结果并能够在另一个 select 语句中再次使用它 PL\SQL Oracle

PL/SQL 触发器中的 SELECT 语句返回 null

如何在 select 的 where 子句中替换 oracle pl/sql 变量