gpt4 book ai didi

oracle - 在存储过程中将Select分配给变量

转载 作者:行者123 更新时间:2023-12-04 10:04:32 24 4
gpt4 key购买 nike

我尝试在Oracle数据库中创建一个过程,但无法实现将查询结果分配给我的变量。这是我要调试的内容:

create or replace
PROCEDURE PCD_COMBAT (identifier_perso NUMBER, identifier_advers NUMBER) AS

ATT_PERSO NUMBER;
OFF_PERSO NUMBER;
DEF_ADVERS NUMBER;

BEGIN

OFF_PERSO := SELECT OFFENSE_PERSO FROM PERSONNAGE WHERE ID_PERSO = identifier_perso;
DEF_ADVERS := SELECT DEFENSE_ADVERSAIRE FROM PERSONNAGE WHERE ID_ADVERSAIRE = identifier_advers;
ATT_PERSO := OFF_PERSO - DEF_ADVERS;
IF ATT_PERSO < 1 { ATT_PERSO := 1 };

END PCD_COMBAT;


它在Oracle Developper中清楚地表明,我的Select不能使他满意,也无法弄清楚原因。我阅读的Oracle库,论坛和代码示例没有太大帮助。

最佳答案

您需要使用SELECT INTO。同样,在PL/SQL中没有括号,您需要使用THENEND IF。我不确定您会如何处理结果。你想还给我吗?然后,您需要一个FUNCTION。它看起来应该像这样(未经测试):

create or replace
FUNCTION PCD_COMBAT (identifier_perso NUMBER, identifier_advers NUMBER)
RETURN NUMBER
AS
ATT_PERSO NUMBER;
OFF_PERSO NUMBER;
DEF_ADVERS NUMBER;
BEGIN
SELECT OFFENSE_PERSO
INTO OFF_PERSO
FROM PERSONNAGE
WHERE ID_PERSO = identifier_perso;
SELECT DEFENSE_ADVERSAIRE
INTO DEF_ADVERS
FROM PERSONNAGE
WHERE ID_ADVERSAIRE = identifier_advers;

ATT_PERSO := OFF_PERSO - DEF_ADVERS;
IF ATT_PERSO < 1 THEN
ATT_PERSO := 1;
END IF

RETURN ATT_PERSO;

END PCD_COMBAT;

关于oracle - 在存储过程中将Select分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16260068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com