2013-04-28 29 views
5

Oracle Database'imde bir yordam oluşturmaya çalışıyorum ve bir sorgunun sonucunu değişkenlerime atayamıyorum. İşte ben hata ayıklamak çalışıyorum ne: my seç doesnt onu memnun ve neden bilemiyorum Açıkça, Oracle developper diyorSaklı yordamda bir değişkene Select atama

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; 

. Okuduğum Oracle kütüphanesi, forumlar ve kod örnekleri çok yardımcı olmadı.

cevap

10

Sen SELECT INTO kullanmak gerekir. Ayrıca PL/SQL numaranızda THEN ve END IF'u kullanmanız gerekmektedir. Sonuçta ne yaptığınızdan emin değilim. Onu geri vermek ister misin? O zaman bir FUNCTION'a ihtiyacınız var. Bu (denenmemiş) gibi görünmelidir:

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; 
+0

Thx, daha önce INSERT INTO denedim ve şimdi sadece bunu kullanmak için sözdizimi yanlış biliyoruz. Parantez hakkında bilmek güzel, C# ve Java programlama için kullanıyorum, DB'ler benim için oldukça yeni. –

2

Bunun gibi değişkenlere değer atayabileceğinizi düşünmüyorum. Böyle SELECT INTO deneyin:

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; 
İlgili konular