comment obtenir des noms de partition dans oracle alors que j'ai de la saisie d'une date
J'ai une table avec plusieurs partitions de gamme. J'ai besoin d'obtenir le nom de tous les partition quand je donne une date.
Pour exemple: si j'date d'entrée 20/09/2014, elle devrait liste de toutes les partitions avant cette date donnée.
create or replace function get_part_name(p_date in date)
return varchar2 is
d date;
retp varchar2(30);
mind date:=to_date('4444-01-01','yyyy-mm-dd');
str varchar2(32000);
cursor c is
select high_value, partition_name p
from user_tab_partitions
where table_name='TEST';
begin
for r in c loop
str := r.high_value;
execute immediate 'select '||str||' from dual' into d;
if p_date<d and d<mind then
retp:=r.p;
mind:=d;
end if;
end loop;
return retp;
end;
C'est returing une date unique. J'ai besoin de toutes les dates, est-il possible?
Vous revenez
comment peut-il être créé. pouvez-vous m'aider?
varchar2
seulement. Si seulement un nom de partition est retourné.. Vous gardez l'écrasement de la même variable! Vous avez besoin d'avoir une table de la fonction de retour d'une table de noms.comment peut-il être créé. pouvez-vous m'aider?
OriginalL'auteur Charles Peter | 2014-10-16
Vous devez vous connecter pour publier un commentaire.
Utiliser votre date souhaitée à la place de
SYSDATE
dans la requête ci-dessus. Ou vous pouvez passer en ENTRÉE par le biais de laFUNCTION
etRETURN
le jeu de résultats.Je devrais ajouter un one-liner, de mettre la date souhaitée à la place de sysdate. Autre chose, il serait de retour toutes les valeurs élevées.
comment peut-il être créé comme une fonction. je suis de retour de quelques erreurs lors de l'exécution de la fonction.
Pourquoi avez-vous besoin d'une fonction quand il pourrait être fait avec de la plaine SQL.
OriginalL'auteur Lalit Kumar B
Trouver le nom de la Partition à l'aide de la date SI vous avez un véritable date de colonne dans la table DB Oracle
OriginalL'auteur gidi gob
SQL unique Solution: (high_value a converti à la date avec le format correct!)
PL/SQL Solution:
Créer un type globaux;
Fonction:
Et Enfin,
Désolé de ne pas obtenir de vous!
Essayez
SELECT * FROM TABLE(get_part_name(sysdate));
OriginalL'auteur Maheswaran Ravisankar
Je sais que ce problème est vieux, mais j'ai couru à travers la recherche de quelque chose et j'ai pensé à peser dans d'empêcher les autres d'aller en bas de la route ci-dessus.Les réponses fournies rendre beaucoup plus difficile qu'il doit être. Vous pouvez utiliser le
dbms_rowid.rowid_object()
pour obtenir les données d'identification de l'objet de la ligne et de joindre ce soit avecuser_objects
,all_objects
oudba_objects
(selon ce qui convient à vos besoins).Quelque chose comme cela devrait fonctionner ...
J'utilise ce code qui a pour déterminer les noms des partitions, pour diverses raisons (requêtes, DML, etc...). J'ai même utilisé cette très récemment identifier les partitions qui sont tombés à l'extérieur d'une fenêtre définie, comme une auto-déposer pour un intervalle de table partitionnée.
OriginalL'auteur nvanwyen