2013-04-28 14 views
5

Oracleデータベースにプロシージャを作成しようとしましたが、クエリの結果を変数に割り当てることができません。ここで私は、デバッグしようとしているものです:ストアド・プロシージャの変数にSelectを割り当てます。

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; 

それは明らかに私の選択のdoesntが彼を喜ばというOracleの開発者に対しで言うと理由を把握することはできません。 Oracleライブラリ、フォーラム、コードサンプルを読んだことはあまり役に立ちませんでした。

答えて

10

あなたは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; 
+0

Thxを、私は前にINSERT INTOを試してみましたが、私は今、私はちょうどそれを使用する構文を誤解していることを実現します。中括弧について知ることは良いことです。私はC#とJavaプログラミングに慣れていますが、DBはまったく新しいものです。 –

2

私はあなたがそのような変数に値を割り当てることはできないと思います。このように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; 
関連する問題