2017-11-30 15 views
0
desc book_data; 

Name  Null Type   
---------- ---- ------------ 
BOOK_NAME  VARCHAR2(50) 
BOOK_PRICE  NUMBER  
BOOK_SSN  VARCHAR2(50) 



DECLARE 
    TYPE book_rec is record(
    book_name varchar2(50), 
    book_price number, 
    book_ssn varchar2(50) 
    ); 
    type book_tbl_type is table of book_rec; 
    book_tbl1 book_tbl_type := book_tbl_type(); 
BEGIN 

    SELECT BOOK_NAME, BOOK_PRICE/*,book_ssn,1*/ BULK COLLECT INTO book_tbl1 FROM book_data; 
    DBMS_OUTPUT.put_line(book_tbl1(1).book_name); 
END; 

Error report - 
ORA-06550: line 11, column 75: 
PL/SQL: ORA-00913: too many values 
ORA-06550: line 11, column 3: 
PL/SQL: SQL Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

질문에 대한 잘못된 오류 메시지로 수집 : 오류 : 여기에 우리가 다음 우리는 "충분하지 값 ORA-00947"가지고해야 세 열 컬렉션 테이블에 두 개의 열을 삽입합니다. 그러나 우리는 "ORA-00913 : 너무 많은 가치"를 얻고 있습니다. 왜 ?BULK는 ORA-00913 및 ORA-00947

DECLARE 
    TYPE book_rec is record(
    book_name varchar2(50), 
    book_price number, 
    book_ssn varchar2(50) 
    ); 
    type book_tbl_type is table of book_rec; 
    book_tbl1 book_tbl_type := book_tbl_type(); 
BEGIN 

    SELECT BOOK_NAME, BOOK_PRICE,book_ssn,1 BULK COLLECT INTO book_tbl1 FROM book_data; 
    DBMS_OUTPUT.put_line(book_tbl1(1).book_name); 
END; 

Error report - 
ORA-06550: line 11, column 71: 
PL/SQL: ORA-00947: not enough values 
ORA-06550: line 11, column 3: 
PL/SQL: SQL Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

질문 : 여기에 우리가 세 가지 열 컬렉션 테이블에 네 개의 열을 삽입합니다. 그렇다면 우리는 "ORA-00913 : 너무 많은 값"오류가있을 수 있습니다. 하지만 "ORA-00947 : 값이 충분하지 않습니다." 왜 ?

답변

0

ORA-00913 너무 많은 값 원인 : SQL 문에는 두 개의 값 세트가 필요합니다. 이 오류는 두 번째 집합에 첫 번째 집합보다 많은 항목이 포함되어있을 때 발생합니다. 예를 들어 WHERE 또는 HAVING 절의 하위 쿼리가 너무 많은 열을 반환하거나 VALUES 또는 SELECT 절이 INSERT에 나열된 열보다 많은 열을 반환 할 수 있습니다. 조치 : 각 세트의 항목 수를 점검하고 SQL.을 동일하게 변경하십시오. BULK의 경우이 오류 메시지가 선택되지 않은 컬럼의 수, 콜렉션 테이블의 열 수를 의미 것으로 보인다 COLLECT에서

..

당신 %의 ROWTYPE을 사용하여 유사한 문제를 방지하기 위해, 뭔가 이렇게 :

DECLARE 
    type book_tbl_type is table of book_data%ROWTYPE; 
    book_tbl1 book_tbl_type := book_tbl_type(); 
BEGIN 
    SELECT b.* BULK COLLECT INTO book_tbl1 FROM book_data b; 
END; 
/