如何在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_ID
和 par_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)