J'ai une instruction SQL avec l'opération PIVOT. Le nombre maximum de colonnes que j'aurai dans PIVOT est de 5, mais je peux en avoir moins, 4, 3, 2. Comment puis-je lire ces colonnes dans mon curseur et affecter (chercher ... dans ...) aux variables fixes , sans survenir l'erreur ORA-01007.Comment extraire les valeurs de curseur du code SQL du pivot vers les variables fixes - Erreur 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;
...
Si je reviens à moins de 5 colums, je veux remplir le reste des variables avec une valeur de 0 ou null.
Les variables vCodColigada et vIdProduto sont identifiés, seuls les colonnes pivots qui peuvent varier entre 1 et 5 (vValor1, vValor2, vValor3, vValor4, vValor5)
Résultat PIVOT SQL:
CODCOLIGADA IDPRD '000125' '002272' '002342'
----------------- ---------------- ---------------- ---------------- ----------------
1 15464 45 300 30
1 18460 35 200 20
1 57492 20 100 10
-------- End of Data --------
Exemple: Si le curseur renvoie 3 valeurs dans le PIVOT (ci-dessus), les variables vValor01, vValor02, vValor03 seront remplies, et les variables vValor04, vValor05 doivent être 0 ou nulles.
Exemple:
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 --------
Comme je l'ai seulement 3 colonnes en PIVOT, et je 5 variables, l'erreur ORA-01007 se produit dans (extraction .. en ...).
Merci, la solution a fonctionné. Comment pourrais-je retourner ce type (lv_num) par une fonction? –
J'ai refactorisé la sortie dans Function. J'espère que cela aide. –
Merci pour votre aide. Cette erreur se produit: ORA-00932: types de données incohérents: expected - got - –