Menu

Problème de type sur une vue avec union

Igmarh - 6 déc. 2017 à 15:50 - Dernière réponse : yg_be 5319 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 26 avril 2018 Dernière intervention
- 29 déc. 2017 à 19:40
Bonjour
j'ai un problème sur le type d'une colonne dans une vue comportant un union

CREATE TABLE table_name (column_name NUMBER(10));

[insertion de rangées dans la table]

CREATE OR REPLACE FORCE VIEW view_name (column_name) AS SELECT column_name FROM table_name; -> OK view_name.column_name est de type number(10)

CREATE OR REPLACE FORCE VIEW view_name (column_name) AS SELECT column_name FROM table_name WHERE column_name<10 UNION SELECT column_name FROM table_name WHERE column_name>=10; -> idem OK

CREATE OR REPLACE FORCE VIEW view_name (column_name) AS SELECT column_name FROM table_name WHERE column_name<10 UNION SELECT NULL FROM table_name WHERE column_name>=10; -> KO view_name.column_name est de type number tout court, j'ai perdu le "(10)"

j'ai fait d'autres essais avec lesquels je n'obtient pas number(10) mais number tout court :
CREATE OR REPLACE FORCE VIEW view_name (column_name) AS SELECT CAST(column_name AS NUMBER(10)) FROM table_name WHERE column_name<10 UNION SELECT CAST(NULL AS NUMBER(10)) FROM table_name WHERE column_name>=10;
CREATE OR REPLACE FORCE VIEW view_name (column_name) AS SELECT CAST(column_name AS NUMBER(10)) FROM table_name WHERE column_name<10 UNION SELECT CAST(column_name AS NUMBER(10)) FROM table_name WHERE column_name>=10;

j'ai trouvé la solution suivante :
CREATE OR REPLACE FORCE VIEW view_name (column_name) AS SELECT CAST(column_name AS NUMBER(10)) FROM
(SELECT column_name column_name FROM table_name WHERE column_name<10 UNION SELECT column_name column_name FROM table_name WHERE column_name>=10);
mais pas très esthétique, et de plus celà engendre un temps de réponse légèrement supérieur

Quelqu'un aurait-il une solution pour forcer le type de ma colonne à number(10) ?

d'avance merci
Afficher la suite 

2 réponses

Répondre au sujet
forum92 179 Messages postés lundi 6 juillet 2015Date d'inscription 1 avril 2018 Dernière intervention - 29 déc. 2017 à 19:03
0
Utile
Bonjour,
Est tu sur que 'column_name<10' compare bien la longueur et non le contenu du champ ?
Commenter la réponse de forum92
yg_be 5319 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 26 avril 2018 Dernière intervention - 29 déc. 2017 à 19:40
0
Utile
bonsoir,
je suis surpris que ceci te convienne:
CREATE OR REPLACE FORCE VIEW view_name (column_name) AS SELECT CAST(column_name AS NUMBER(10)) FROM 
(SELECT column_name column_name FROM table_name WHERE column_name<10 UNION SELECT column_name column_name FROM table_name WHERE column_name>=10); 

je te suggère d'expliquer ce que tu veux réaliser.
Commenter la réponse de yg_be