PIVOT操作を使用したSQL文があります。私がPIVOTに持つ列の最大数は5ですが、4,3,2などは少なくてもかまいません。 カーソルでこれらの列を読み込み、固定変数にどのように割り当てることができますかエラーは発生しません。ORA-01007ピボットSQLから固定変数にカーソル値をフェッチする方法 - エラーORA-01007
...
sql_stmt := 'select * from
(select codcoligada,
idprd,
codcfo,
valnegociado
from tcitmorcamento
where codcoligada = ' || p_codcoligada || '
and codcotacao = ' || '''' || p_codcotacao || '''' || ')
pivot
(
sum(valnegociado) for codcfo in (' || pivot_clause || ')
)';
ret := t_tab_sesa_cotacao();
open vCursor for sql_stmt;
loop
/* If my cursor returns less than 5 columns in PIVOT the error occurs ORA-01007 */
fetch vCursor into vCodColigada, vIdProduto, vValor01, vValor02, vValor03, vValor04, vValor05;
exit when vCursor%NOTFOUND;
ret.extend;
ret(ret.count) := t_type_sesa_cotacao(vCodColigada, vIdProduto, vValor01, vValor02, vValor03, vValor04, vValor05);
end loop;
close vCursor;
...
5個未満の列を戻す場合は、残りの変数を0またはnullの値で埋めたいとします。
CODCOLIGADA IDPRD '000125' '002272' '002342'
----------------- ---------------- ---------------- ---------------- ----------------
1 15464 45 300 30
1 18460 35 200 20
1 57492 20 100 10
-------- End of Data --------
例:
変数vCodColigadaとvIdProduto
は、1と5(vValor1、vValor2、vValor3、vValor4、vValor5)結果ピボットSQLの間で変化させることができるだけピボット列が識別されます。 カーソルがPIVOT(上記)の3つの値を返した場合、変数vValor01、vValor02、vValor03が入力され、変数vValor04、vValor05は0またはnullでなければなりません。
例:私はPIVOT 3つの列を持っている、と私は5つの変数を持っていると、ORA-01007エラーが発生して
CODCOLIGADA IDPRD VALOR01 VALOR02 VALOR03 VALOR04 VALOR05
----------------- ---------------- ---------------- ---------------- ---------------- ---------------- ----------------
1 15464 45 300 30 0 0
1 18460 35 200 20 0 0
1 57492 20 100 10 0 0
-------- End of Data --------
(...に...フェッチ)。
ありがとうございました。ソリューションは機能しました。この型(lv_num)を関数でどのように返すことができますか? –
私は関数の出力をリファクタリングしました。それが役に立てば幸い。 –
ありがとうございました。 ORA-00932:一貫性のないデータ型:expected-got- –