2014-07-07 3 views
0

내 웹 사이트의 티켓 시스템에 대해 PL/SQL에서 프로 시저를 만들려고합니다. 일부 데이터를 데이터베이스에 저장하는 간단한 절차가 필요합니다. 사용자의 이름 (임의의 VARCHAR2)과 숫자 및 오늘의 날짜가 입력됩니다.PL/SQL 프로 시저 - 티켓 시스템

이 프로 시저를 호출하면 데이터베이스의 숫자가 자동으로 높아집니다 (기본 키일 수 있음). 그리고 입력을 데이터베이스에 추가합니다. 그러나 나는 더 많은 사람들이 그것을 즉시 액세스 할 수있는 옵션으로 이런 식으로 만드는 법을 모릅니다.

아무도 도와 줄 수 있습니까?

내가 이미 가지고있는 것을 알고 싶은 사람들에게.

CREATE OR REPLACE PROCEDURE VoegBoeteToe 
(v_speler IN number, v_date IN date, v_boete IN number) 
IS VoegBoeteToe 
DECLARE 
v_nextNum NUMBER; 

BEGIN 
SELECT BETALINGSNR 
INTO v_nextNum 
FROM BOETES 
ORDER BY BETALINGSNR DESC; 

v_nextNum := v_nextNum + 1; 

INSERT INTO BOETES VALUES(v_nextNum,v_speler,v_date,v_boete); 

end; 
/
+0

[Oracle에서 AUTO \ _INCREMENT로 ID를 만드는 방법은?] (http://stackoverflow.com/questions/11296361/how-to-create-id-with-auto-increment-on-oracle) – Noel

답변

0

는 그런 다음 코드에서 당신은 그런 일 사용할 수 있습니다 SEQUENCE에게

CREATE SEQUENCE DUMMY_SEQ 
/

을 만들어야합니다

select DUMMY_SEQ.NEXTVAL into myVar from dual을;

+0

의견을 주셔서 감사합니다. 그러나 그 간격에 관한 것은 아닙니다. 그것은 오류를주는 내 절차입니다. 여기에 허용되지 않는 열입니다. – Jos

+0

다음 중 어느 줄에 오류가 있습니까? Btw. 테이블에 둘 이상의 행이있을 경우 선택 항목에서 TOO_MANY_ROWS 예외가 발생합니다. –

0

먼저 시퀀스를 만듭니다. 시퀀스는 호출 될 때마다 항상 증가하는 숫자를 생성합니다. 좋은 예제는 this을 참조하십시오. documentation도 유용 할 수 있습니다. 그런 다음

CREATE SEQUENCE user_sequence 
START WITH 1000     -- your sequence will start with 1000 
INCREMENT BY 1;     -- each subsequent number will increment by 1 

, 프로 시저의

SELECT user_sequence.NEXTVAL INTO v_nextNum FROM DUAL; 
1

네 번째 줄은 IS 대신 IS VoegBoeteToe해야한다. 또한 절차에서 필요하지 않은 다섯 번째 줄 (DECLARE)을 제거하십시오. 시퀀스를 사용하여 안전하게 순차 번호를 유도하십시오. 그것은 또한 당신이있어 처의 BOETES 테이블의 필드 이름의 목록을 포함하는 아주 좋은 생각이 될 것

CREATE SEQUENCE BOETES_SEQ; 

CREATE OR REPLACE PROCEDURE VoegBoeteToe 
(v_speler IN number, v_date IN date, v_boete IN number) 
IS 
BEGIN 
    INSERT INTO BOETES VALUES(BOETES_SEQ.NEXTVAL,v_speler,v_date,v_boete); 
end; 

: 모두가 말하고 끝나면

그래서, 당신의 절차는 뭔가를 찾아야한다 값을 삽입합니다. 이렇게하면 코드를 유지 관리해야하는 모든 사람들이 더 나은 삶을 살 수있게되며 몇 가지 오류를 방지 할 수 있습니다.

공유하고 즐기십시오.

+0

메시지를 보내 주셔서 감사합니다. 그것은 실제로 작동합니다. – Jos

관련 문제