2016-12-14 68 views
0

我需要將管理員和日期添加到列中,但每年只能有兩名管理員,我該怎麼做? 我有這個: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

爲什麼不聲明一個變量在你的程序中 「CT」(對於COUNT),和'SELECT COUNT(*)到從administra其中CT(ANO = ano_in)'?然後測試'ct> 1'。讓數據庫儘可能多地做好工作! – mathguy

回答

0

你爲什麼選擇輸入參數?

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

您需要另一個變量SELECT COUNT,然後檢查:

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);如果已有兩個管理員,則該過程應該引發錯誤,因爲該過程試圖在同一年再插入一個管理員。 – mathguy