2013-02-26 2 views
3

내가 XMLTABLE을 포함하는 스크립트를 실행하려고에서 가져올 때이 SELECT 문 오류가 예상되고 나는INTO 절은 XMLTABLE

PLS-00428을 얻고있다 : INTO 절이 예상됩니다 SELECT 문

어떻게하면 내 스크립트를 수정하고 XML에서 2 행을 얻을 수 있습니까? SQL에서

오라클 11g

DECLARE xml_char xmltype; 
BEGIN 
xml_char := xmltype.createXML('<xml><ROWSET><ROW UNIQUEID="All0" ALLOWCHG="0"/><ROW UNIQUEID="All1" ALLOWCHG="1"/></ROWSET></xml>'); 
select UNIQUEID, ALLOWCHG from xmltable ('/xml/ROWSET/ROW' passing xml_char columns "UNIQUEID" varchar(30) path '@UNIQUEID', "ALLOWCHG" varchar(30) path '@ALLOWCHG') ; 
END; 
+0

이것은 간단한 구문 질문입니다. "멍청한 놈"으로 자신을 설명하면 오라클 문서를 읽을 의무가 없습니다. http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/selectinto_statement.htm#i36066 – APC

+0

오케이,하지만 왜 그 필드 (UNIQUEID, ALLOWCHG)를 변수에 넣으라는 요청을 받았습니까? – evangelus

+0

Oracle Pl/SQL은 변수를 선택해야하기 때문에. 그것은 단지 않습니다. – APC

답변

12

는 선택 문은 결코 INTO 절을 포함하지 않는다.

PL/SQL에서 select 문에는 커서가있는 경우를 제외하고 INTO 절이 필요합니다. 다년간의 경험에도 불구하고

DECLARE 
xml_char xmltype; 

cursor c_cursor is 
select UNIQUEID, ALLOWCHG 
from xmltable ('/xml/ROWSET/ROW' 
       passing xml_char 
       columns 
        "UNIQUEID" varchar(30) path '@UNIQUEID', 
        "ALLOWCHG" varchar(30) path '@ALLOWCHG' 
      ); 

BEGIN 

xml_char := xmltype.createXML('<xml><ROWSET><ROW UNIQUEID="All0" ALLOWCHG="0"/><ROW UNIQUEID="All1" ALLOWCHG="1"/></ROWSET></xml>'); 

for i in c_cursor loop 
    dbms_output.put_line('UNIQUEID: ' || i.uniqueid || ' ALLOWCHG: '|| i.allowchg); 
end loop; 

END; 

우리 모두가 내가 바보 같은 실수는 짝짓기를하게 걱정하지 마세요 : 나는 커서를 사용하도록 코드를 수정했습니다.