2017-12-27 14 views
1

Oracle Database 12cでのPL/SQLの使用。PL/SQL:行を1つの文字列に結合する方法

私はこのようなテーブルがあります。私はこの文字列を作成したい

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

を:FOO、1、バー、2、バズ、3

は、これを行うための最善の方法は何ですか?以前私は、SQL Serverを使用し、これが働いた:

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を試してみました

「次のいずれかを期待する場合、 『FROM』 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セクションを使用し、プログラムにはブロックBEGINENDを使用します。 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

関連する問題