2017-12-27 31 views
1

Oracle Database 12c에서 PL/SQL 사용. PL/SQL : 행을 하나의 문자열로 결합하는 방법

는이 같은 테이블이 있습니다

filename | priority       
---------- ----------- 
foo | 1   
bar | 2 
baz | 3  

내가이 문자열을 만들려면 : foo는, (1), 바, 2, 바즈을

이 작업을 수행하는 가장 좋은 방법은 무엇입니까 3? 이전에 나는 SQL 서버를 사용하고이 일 :

DECLARE 
    @str varchar(100) 
SELECT @str = COALESCE(@str + ', ', '') + CONCAT(filename, ', ', priority) 
FROM table_name; 

하지만 지금은 오라클에서이 작업을 수행하기 위해 노력하고있어 나는이 일을 얻을 수 없습니다. 내가 좋아하는 몇 가지 방법을 시도했다 :

DECLARE 
    str varchar(100) := coalesce(str || ', ', '') || CONCAT(filename, ', ', priority) 
FROM table_name; 

을하지만,이 오류를 받았다 : 나는 또한 같은 listagg을 시도

"다음 중 하나를 예상 할 때"보낸 사람 "PLS-00103은 기호가 발생했습니다" :

listagg(filename|| ',' || priority, ',') within group (order by priority) as str 
from table_name; 

이 나에게 오류 주었다 이내에 "PLS-00103 기호가 발생했습니다"를

내가 뭐하는 거지 잘못 "다음 중 하나를 예상 할 때"?

+0

'DECLARE ... FROM TABLE_NAME' ??? –

+0

왜 프로 시저 (및 PL/SQL) 코드가 필요합니까? 이를 일반 SQL로 수행 할 수 있습니다. 그럼 - 왜 이럴 필요가 있니? 필요한 것을 할 수있는 더 좋은 방법이있을 수 있습니다. 필요한 이유를 설명하면 도움을 줄 수 있습니다. – mathguy

+0

새로운 기능을 포함하도록 PL/SQL로 작성된 기존 코드를 수정하려고합니다. – Murasaki

답변

2

Oracle의 저장 프로시 저는 선언 부분과 실행 부분으로 구성됩니다. 변수 선언에는 DECLARE 섹션을 사용하고 프로그램에는 BEGIN ~ END 블록을 사용합니다. SELECT INTO을 사용하여 변수에 값을 선택하십시오.

DECLARE 
    v_str varchar(10000); 
BEGIN 
    select 
    listagg(filename || ',' || priority, ',') within group (order by priority) 
    into v_str 
    from table_name; 

    ... 
END; 
+0

감사합니다. 선언문이 실행 코드와 동일한 블록에 들어갈 수 없다는 것을 알지 못했습니다. – Murasaki