155 votes

Howto déclarer la variable et de l'utiliser dans le script SQL même?

Je suis en train de faire quelques tests ici et écrire du Sql. J'essaie d'écrire du code réutilisable et donc je veux déclarer quelques variables au début et de les réutiliser dans le script, comme ceci:

DEFINE stupidvar = 'stupidvarcontent';

SELECT stupiddata
FROM stupidtable
WHERE stupidcolumn = &stupidvar;

J'ai essayé jusqu'à présent:

Utiliser un DÉCLARER l'article et insérer l'instruction SELECT suivante, en BEGIN et END;. L'Acces a la variable à l'aide de &stupidvar. Utilisez le mot-clé DEFINE et accéder à la variable. En utilisant le mot-clé VARIABLE et accéder à la variable.

J'ai toutes sortes d'erreurs lors de mes essais (Unbound variable, erreur de Syntaxe, Attendue SELECT INTO...).

En fouillant le net, j'ai trouver beaucoup d'explications différentes, concernant SQL, PL/SQL, etc.

Je suis à l'aide de SQLDeveloper pour accéder à une DB Oracle. Comment puis-je déclarer une variable et de la réutiliser dans les énoncés suivants?

Je vous remercie à l'avance!

165voto

APC Points 69630

Il y a plusieurs façons de déclarer des variables dans SQL*Plus de scripts.

La première est l'utilisation de la VAR. Le mécanisme de l'affectation de valeurs à une variable est avec un EXEC composez le:

SQL> var name varchar2(20)
SQL> exec :name := 'SALES'

PL/SQL procedure successfully completed.

SQL> select * from dept
  2  where dname = :name
  3  /

    DEPTNO DNAME          LOC
---------- -------------- -------------
        30 SALES          CHICAGO

SQL>

Un VAR est particulièrement utile lorsque l'on veut appeler une procédure stockée qui a des paramètres ou d'une fonction.

Alternativley nous pouvons utiliser en remplacement des variables. Ceux-ci sont bons pour le mode interactif:

SQL> accept p_dno prompt "Please enter Department number: " default 10
Please enter Department number: 20
SQL> select ename, sal
  2  from emp
  3  where deptno = &p_dno
  4  /
old   3: where deptno = &p_dno
new   3: where deptno = 20

ENAME             SAL
---------- ----------
CLARKE            800
ROBERTSON        2975
RIGBY            3000
KULASH           1100
GASPAROTTO       3000

SQL>

Lorsque nous sommes en train d'écrire un script qui appelle d'autres scripts, il peut être utile de Définir des variables d'avance:

SQL> def p_dno = 40
SQL> select ename, sal
  2  from emp
  3  where deptno = &p_dno
  4  /
old   3: where deptno = &p_dno
new   3: where deptno = 40

no rows selected

SQL>

Enfin il y a les anonymes PL/SQL bloc. Comme vous le voyez, on peut toujours assigner des valeurs aux variables déclarées de manière interactive:

SQL> set serveroutput on size unlimited
SQL> declare
  2      n pls_integer;
  3      l_sal number := 3500;
  4      l_dno number := &dno;
  5  begin
  6      select count(*)
  7      into n
  8      from emp
  9      where sal > l_sal
 10      and deptno = l_dno;
 11      dbms_output.put_line('top earners = '||to_char(n));
 12  end;
 13  /
Enter value for dno: 10
old   4:     l_dno number := &dno;
new   4:     l_dno number := 10;
top earners = 1

PL/SQL procedure successfully completed.

SQL>

35voto

be here now Points 4707

Essayez d'utiliser des guillemets doubles si c'est une variable char:

DEFINE stupidvar = "'stupidvarcontent'";

ou

DEFINE stupidvar = 'stupidvarcontent';

SELECT stupiddata  
FROM stupidtable  
WHERE stupidcolumn = '&stupidvar'

upd:

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Aug 25 17:13:26 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn od/od@etalon
Connected.
SQL> define var = "'FL-208'";
SQL> select code from product where code = &var;
old   1: select code from product where code = &var
new   1: select code from product where code = 'FL-208'

CODE
---------------
FL-208

SQL> define var = 'FL-208';
SQL> select code from product where code = &var;
old   1: select code from product where code = &var
new   1: select code from product where code = FL-208
select code from product where code = FL-208
                                      *
ERROR at line 1:
ORA-06553: PLS-221: 'FL' is not a procedure or is undefined

24voto

LIUFA Points 3642

En PL/SQL v. 10

mot-clé declare est utilisé pour déclarer la variable

DECLARE stupidvar varchar(20);

pour affecter une valeur, vous pouvez le configurer lorsque vous déclarez

DECLARE stupidvar varchar(20) := '12345678';

ou pour sélectionner quelque chose dans cette variable vous utilisez INTO déclaration, cependant, vous devez envelopper la déclaration en BEGIN et END, aussi vous devez vous assurer que seule valeur est retournée, et n'oubliez pas les points-virgules.

ainsi, le texte complet de la déclaration de sortir suivantes:

DECLARE stupidvar varchar(20);
BEGIN
    SELECT stupid into stupidvar FROM stupiddata CC 
    WHERE stupidid = 2;
END;

2voto

Voici votre réponse:

DÉFINIR num := 1; --Le côlon est nécessaire pour que les valeurs par défaut. SÉLECTIONNEZ &num from dual;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X