programing

저장 프로시저의 변수에 선택 할당

testmans 2023. 11. 6. 21:40
반응형

저장 프로시저의 변수에 선택 할당

Oracle Database에 프로시저를 만들려고 하는데 쿼리 결과를 변수에 할당할 수 없습니다.디버그하려는 내용은 다음과 같습니다.

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;

오라클 디벨로퍼에는 분명히 내 셀렉트가 그를 기쁘게 하지 않으며 그 이유를 알 수 없다고 적혀 있습니다.제가 읽은 오라클 라이브러리, 포럼 및 코드 샘플은 큰 도움이 되지 않았습니다.

사용하셔야 합니다.SELECT INTO. 또한 교정기가 없습니다.PL/SQL당신은 사용해야 합니다.THEN그리고.END 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;

그런 변수에는 값을 할당할 수 없다고 생각합니다.다음과 같이 SELECT INTO를 시도합니다.

create or replace
PROCEDURE PCD_COMBAT (identifier_perso NUMBER, identifier_advers 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 { ATT_PERSO := 1 };

END PCD_COMBAT;

언급URL : https://stackoverflow.com/questions/16260068/assign-a-select-to-a-variable-in-a-stored-procedure

반응형