2017-04-21 6 views
0

id (유형이 NUMBER) 및 Name (유형이 VARCHAR2) 인 Users 테이블이 있습니다. 모든 열은 다음과 같이 내가 하나 개의 매개 변수 (새 이름)에 걸릴 SQL 프로 시저를 생성매개 변수를 통해 값을 전달하지 않고 열을 값에 삽입 하시겠습니까?

비 - 널 (NULL) :

CREATE OR REPLACE PROCEDURE insert_new_user 
    (
     this_name VARCHAR2; 
) 
    AS 
    BEGIN 
     INSERT INTO Users 
     VALUES (this_name); 
     COMMIT; 
    END; 
/

절차는 컴파일하지만 오류가 다음과 같이 오류 ORA-00947을 :하지 충분한 가치.

BEGIN 
     insert_new_user ('Bob'); 
    END 
/

그것은 PL/SQL 컴파일 오류가 발생 다음과 같이

나는 그것을 실행하는 경우.

id 열을 매개 변수를 통해 전달하지 않고 자동으로 다음 번호로 설정하려면 어떻게해야합니까? Bob 새로운 인 경우

ID 이름

1 아담

2 벤

3 밥

:

이상적인 출력은 시나리오 등이 될 것입니다 사용자 행이 user 표 및 3id 열에 자동으로 추가 된 번호입니다.

+0

ID 열은 ID 열입니까? –

+0

예, PK입니다 – 5120bee

+0

기본 키와 ID가 동일하지 않습니다. 식별 컬럼 값은 자동 증가입니다. id 열이 기본 키이지만 자동 증분이 아닌 경우 테이블에 행을 삽입 할 때 id 열이 값을 제공해야합니다. 아래 @Dan의 대답은 자동 증분 열에 대한 자세한 내용을 제공해야합니다. –

답변

1

오라클 (11)과 :

CREATE SEQUENCE Users__ID__Seq; 
/

CREATE OR REPLACE PROCEDURE insert_new_user 
(
    this_name USERS.NAME%TYPE 
) 
AS 
BEGIN 
    INSERT INTO Users (id, name) 
    VALUES (Users__ID__Seq.NEXTVAL, this_name); 
END; 
/

참고 :

는 기본적으로, 당신은 (오라클 버전에서 지원하는 경우) 실행해야 this discussion 참조 왜 일반적으로 절차에서 COMMIT을 사용하지 않아야하지만 대신 사용자 트랜잭션에서 COMMIT을 사용해야합니다.

+0

감사합니다. 이것은 제가 가장 많이 찾던 것에 적합합니다. – 5120bee

3

당신이하려고하는 것은 테이블에 인 ID 열 (각 레코드에 대해 자동으로 증가하는)을 설정하는 것입니다. 따라서 저장 프로 시저를 변경할 필요가 없습니다.

answer이이 문제를 해결하는 것으로 보입니다. 사용, 이전 시퀀스

CREATE TABLE t1 (
    c1 NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1), 
    c2 VARCHAR2(10) 
);