2015-12-09 53 views
0

我能想到的最好的解釋是:我試圖給每個機器人一個唯一的ID。然後,當我運行程序時,我只需要給機器人一個名稱和ID。狀態是爲我生成的。以遞增值插入

但是,由於找不到正確的方法來做到這一點,我正在達到總阻礙。我已經嘗試過對行進行計數並將其放入臨時文件中。這是行不通的。每次運行它時都會創建一個新行。所以,我應該總是得到一個新的身份證。但我可能做錯了。

我得到這個錯誤:

Error(23,44): PL/SQL: ORA-00984: column not allowed here

下面是該過程:

CREATE OR replace PROCEDURE Checkbot 
(nameinput IN VARCHAR2) 
IS 
    partfound NUMBER(4); 
    foundall BOOLEAN; 
    tempid NUMBER; 
BEGIN 

--Where I am having issues: 

    SELECT Count(*) 
    INTO tempid 
    FROM robotinventory; 
    INSERT INTO robotinventory VALUES (tempid, nameinput, NULL); 

    foundall := TRUE; 
    FOR i IN 1..8 LOOP 
    partfound := 0; 
    SELECT Max(prtserial) 
    INTO partfound 
    FROM partinventory 
    WHERE parttypeid = i; 

    IF partfound > 0 THEN 
     DELETE FROM partinventory 
     WHERE prtserial = partfound; 
     INSERT INTO robotprt VALUES (tempid, idinput, i); 
    ELSE 
     foundall := FALSE; 
    END IF; 
    END LOOP; 


    IF foundall THEN 
     UPDATE robotinventory 
     SET status = 'ready for assembly' 
     WHERE robotid = tempid; 
    ELSE 
     UPDATE robotinventory 
     SET status = 'waiting on parts' 
     WHERE robotid = tempid; 
    END IF; 

    END;/ 

機器人庫存表:

CREATE TABLE RobotInventory 
(RobotID Number(4) PRIMARY KEY, 
RobotName VARCHAR2(24), 
Status VARCHAR2(64)); 

我的代碼以前的版本,拿出我做了什麼在我的錯誤,我的目標是用一個自動遞增的數字替換idInput:

create or replace procedure checkbot 
(idInput in number, nameInput in varchar2) 
is 
    partFound number(4); 
    foundAll boolean; 
begin 
    insert into robotInventory values (idInput, nameInput, null); 
    foundAll := true; 
    for i in 1..8 loop 
    partFound := 0; 
    select max(prtSerial) 
    into partFound 
    from partInventory 
    where ParttypeID = i; 

    if partFound > 0 then 
     delete from partInventory 
     where prtSerial = partFound; 
     insert into robotPrt values (partFound, idInput, i); 
    else 
     foundAll := false; 
    end if; 
    end loop; 


    if foundAll then 
     update robotInventory 
     set status = 'ready for assembly' 
     where robotID = idInput; 
    else 
     update robotInventory 
     set status = 'waiting on parts' 
     where robotID = idInput; 
    end if; 

    END; 
/
+0

工作的人誰的代碼是好奇:http://pastebin.com/L5WBr4Br – Kevin

回答

1

創建一個序列(在下面調用seq)並在INSERT SQL中使用它來填充robot_id。

INSERT INTO robotinventory VALUES (seq.nextval, nameinput, NULL); 

查看Oracle文檔,瞭解如何更詳細地創建序列。以下是您可以更改以適應您的需求的示例。

create sequence seq 
start with 1 
increment by 1 
maxvalue 9999; 

HTH

+0

錯誤說我不能在這裏使用一個序列,並指出,有一個外鍵robotid另一個表 – Kevin

+0

已更新的代碼顯示實際的工作代碼,它在底部,但我仍然需要找出如何增加。 – Kevin