2017-10-03 10 views
1

私は変数にクエリを格納しようとしていましたが、問題が発生しました。私はエラーを取得し続ける変数にクエリを格納する

'||'の呼び出しで間違った番号または種類の引数

これは私が

DECLARE 
addresses VARCHAR(200); 

CURSOR allAddresses IS 
     SELECT * 
     FROM ALL_ADDRESS; 
BEGIN 
FOR rec IN allAddresses LOOP 
     addresses := addresses || rec; 
END LOOP; 
DBMS_OUTPUT.PUT_LINE(addresses); 
END; 
+1

'rec'はレコードデータ型です。 'rec'レコードの特定のフィールド(列)にアクセスするには、ドット表記法を使用します。 'rec.col_name' –

+0

ありがとうございました。 – Niall

+0

クエリテキストまたはその結果を保存しますか? –

答えて

3

あなたは名前で使用しているレコードのrecの列を参照してください。

DECLARE 
    addresses VARCHAR(200); 

    CURSOR allAddresses IS 
    SELECT * 
    FROM ALL_ADDRESS; 
BEGIN 
    FOR rec IN allAddresses LOOP 
    addresses := addresses || rec.house_number 
          || ' ' || rec.house_name 
          || ' ' || rec.address1 
          || ' ' || rec.address2; 
    END LOOP; 
    DBMS_OUTPUT.PUT_LINE(addresses); 
END; 
/
-1

はこれを試してみてくださいしようとしたものです -

addresses := addresses || '' || rec; 
+0

私はまだ同じエラーが発生しているようです – Niall

2

イテレータCURSOR for loopは使用できません直接あなたのexpressions.Youにのみカーソル変数呼び出し側の事を理解しておく必要があり、rec.col1として列名にこのシナリオではrec.col2 ..etc

DECLARE 
addresses VARCHAR(200); 

CURSOR allAddresses IS 
     SELECT * 
     FROM ALL_ADDRESS; 
BEGIN 
FOR rec IN allAddresses LOOP 
     addresses := addresses || rec.<address_column>; 
END LOOP; 
DBMS_OUTPUT.PUT_LINE(addresses); 
END; 
2

を参照することができます。

DECLARE 
    addresses VARCHAR(200); 

    CURSOR allAddresses IS 
    SELECT * 
    FROM ALL_ADDRESS; 
BEGIN 
    FOR rec IN allAddresses LOOP 
    addresses := addresses || rec.a; -- A as attribute of your cursor 
--- so your need to access your cursor attribute using loop name i.e rec 
     END LOOP; 
     DBMS_OUTPUT.PUT_LINE(addresses); 
    END; 
    /

あなたがしようとしている時はいつでもカーソルレコードにアクセスするには、属性の前にcursor変数を呼び出す必要があります。 お手数ですがありがとうございます。

関連する問題