2016-12-14 8 views
0

管理者と日付を列に追加する必要がありますが、年間管理者は2人しかいません。どうすればいいですか?あなたが入力パラメータに選択しない理由同じデータを持つ2つの列のみを追加するSQL

PROCEDURE regista_administrador (
    proprietario_in   IN administra.proprietario%TYPE, 
    ano_in   IN administra.ano%TYPE) 
    IS 
    BEGIN 
    SELECT ano INTO ano_in FROM administra WHERE (ano = ano_in); 

    IF (SQL%ROWCOUNT = 0) THEN 
     RAISE_APPLICATION_ERROR(-20003, -- Código definido pelo programador. 
           'Já existem dois administradores nesse ano.'); 
    ELSE 
     INSERT INTO administra(proprietario, ano) 
      VALUES (proprietario_in, ano_in); 
    END IF; 
    EXCEPTION 
    WHEN OTHERS THEN RAISE; 
    END regista_administrador; 
+0

なぜadministraから(あのCTにあなたの手順で(COUNT用)、変数 "CT" を宣言し、 'SELECT COUNT(*)ではありません= ano_in) '?次に 'ct> 1 'をテストします。データベースにできるだけ多くの作業をさせてください! – mathguy

答えて

0

: は、私はこれを持っていますか?

あなたはCOUNTを選択し、それをチェックするために別の変数を持っている必要があり
SELECT ano INTO ano_in FROM administra WHERE (ano = ano_in); 

SELECT count(1) INTO ano_cnt FROM administra WHERE (ano = ano_in); 

IF (ano_cnt = 2) THEN 
    RAISE_APPLICATION_ERROR(-20003, -- Código definido pelo programador. 
          'Já existem dois administradores nesse ano.'); 
0

あなたはこの条件年間の変化当たりわずか2登録した管理者を持っている場合:

IF (SQL%ROWCOUNT = 0) THEN 

IF (SQL%ROWCOUNT > 1) THEN 

あなたのエラーを起こす

そしてなぜこのクエリを行うのですか?

SELECT ano INTO ano_in FROM administra WHERE (ano = ano_in); 

私は右のクエリがあると思う:

SELECT count(ano) FROM administra WHERE (ano = ano_in); 
+0

テストは> = 2(または> 1)でなければなりません。すでに2人の管理者がいる場合は、同じ年にもう1人の管理者を追加しようとしているため、エラーが発生するはずです。 – mathguy

関連する問題