2013-05-14 2 views
2

Voici la condition pour ma demande de table.Manière correcte d'écrire des conditions PL SQL

level of  till 300$  301-500$  501-3400$ 
credit card 
usage in 
3 month 

0%   0%    0%    0% 
1-30%   30%    0%    0% 
31-50%  50%    0%    0% 
51-60%  50%    15%   0% 
61-70%  100%    15%   0% 
70%~   100%    30%   30% 

Ma tâche consiste à récupérer toutes les informations que j'ai mentionnées ci-dessus dans une table en utilisant PL SQL. Je demande la table qui se compose de 3 colonnes comme client_id, level_3m et credit_limit Ainsi, la sortie (par exemple) devrait ressembler à ceci en utilisant les informations ci-dessus:

level_3m  credit_limit($)  new_limit(%) 

0    50     0 
45    400    0 
45    250    50 
65    350    15 
80    1500    30 

Qu'ai-je fait jusqu'à présent? Voici mon propre script:

DECLARE 
    v_level  VARCHAR2(100); 
    v_credit_limit VARCHAR2(100); 
    v_id   VARCHAR2(100); 
    new_limit  VARCHAR2(100); 
BEGIN 
    SELECT level_3m, 
      credit_limit 
    INTO v_level, v_credit_limit 
    FROM request a 
    WHERE v_id = a.client_id; 

    --this is for "till 300$" condition 
    IF v_level = 0 
     AND v_credit_limit =< 300 THEN 
     new_limit := 0; 
    ELSIF v_level >= 1 
      AND v_level <= 30 
      AND v_credit_limit =< 300 THEN 
     new_limit := 30; 
    ELSIF v_level >= 31 
      AND v_level <= 50 
      AND v_credit_limit =< 300 THEN 
     new_limit := 50; 
    ELSIF v_level >= 51 
      AND v_level <= 60 
      AND v_credit_limit =< 300 THEN 
     new_limit := 50; 
    ELSIF v_level >= 61 
      AND v_level <= 70 
      AND v_credit_limit =< 300 THEN 
     new_limit := 100; 
    ELSIF v_level >= 70 
      AND v_credit_limit =< 300 THEN 
     new_limit := 100; 
    END IF; 
END; 

/

--the other conditions were written same manner as the above one. 

Je suis nouveau à PL/SQL alors dites-moi s'il vous plaît est mon état droit? Ou y a-t-il un autre moyen plus simple d'écrire ces conditions?

+0

Je pense que vous pouvez rechercher une solution avec 'cas'. Je ne sais pas bien pl sql mais ça existe. –

+0

voulez-vous dire utiliser cas-quand condition? – user2082503

+0

Oui, même si je ne le connais pas très bien, je pense que ça peut t'aider. Essayez de lire et de voir dans les documentations si cela va vous aider. –

Répondre

2

Vous êtes en train de faire des déclarations correctes.

Une autre option utilise CASE. C'est fondamentalement la même chose, mais il semble parfois un peu plus net, surtout si vous écrivez beaucoup de clauses ELSIF.

CASE 
     WHEN v_level=0 and v_credit_limit=<300 then new_limit:=0 
     WHEN v_level>=1 and v_level <=30 and v_credit_limit =<300 then new_limit:=30 
     WHEN v_level>=31 and v_level<=50 and v_credit_limit=<300 then new_limit:=50 
     WHEN v_level>=51 and v_level<=60 and v_credit_limit=<300 then new_limit:=50 
     WHEN v_level>=61 and v_level<=70 and v_credit_limit=<300 then new_limit:=100 
     WHEN v_level>=70 and v_credit_limit=<300 then new_limit:=100 
    END CASE 

Peu importe si vous utilisez IF ou CASE à mon avis.

+0

Merci! Je vais essayer d'utiliser CASE-WHEN – user2082503

1

Personnellement, je voudrais avoir une table avec la limite v_level et de crédit et joindre à cela pour obtenir new_limit.

C'est la manière relationnelle, et donc la "bonne manière" dans ce contexte.