129 votes

Comment utiliser les variables dans Oracle SQL Developer?

Voici un exemple d'utilisation de variables dans SQL Server 2000.

DECLARE @EmpIDVar INT

SET @EmpIDVar = 1234

SELECT *
FROM Employees
WHERE EmployeeID = @EmpIDVar

Je veux faire exactement la même chose dans Oracle en utilisant SQL Developer sans complexité supplémentaire. Il semble que ce soit une chose très simple à faire, mais je ne trouve pas de solution simple. Comment puis-je faire cela?

0 votes

En tant que procédure stockée ou script? Si vous codifiez en dur la valeur de EmpIDVar, pourquoi utiliser une variable du tout?

7voto

Baodad Points 175

Vous pouvez en apprendre davantage sur les variables de substitution ailleurs; elles sont très pratiques dans SQL Developer. Mais j'ai des difficultés à utiliser les variables de liaison dans SQL Developer. Voici ce que je fais:

SET SERVEROUTPUT ON
declare
  v_testnum number;
  v_teststring varchar2(1000);

begin
   v_testnum := 2;
   DBMS_OUTPUT.put_line('v_testnum est maintenant ' || v_testnum);

   SELECT 36,'hello world'
   INTO v_testnum, v_teststring
   from dual;

   DBMS_OUTPUT.put_line('v_testnum est maintenant ' || v_testnum);
   DBMS_OUTPUT.put_line('v_teststring est ' || v_teststring);
end;

SET SERVEROUTPUT ON permet d'afficher du texte dans la console de sortie du script.

Je crois que ce que nous faisons ici est officiellement appelé PL/SQL. Nous avons quitté le domaine du pur SQL et utilisons un moteur différent dans Oracle. Vous voyez le SELECT ci-dessus? En PL/SQL, vous devez toujours SELECT ... INTO soit une variable, soit un refcursor. Vous ne pouvez pas simplement SELECT et retourner un ensemble de résultats en PL/SQL.

7voto

Peter Points 112

Je pense que le moyen le plus simple dans votre cas est :

DEFINE EmpIDVar = 1234;

SELECT *
FROM Employees
WHERE EmployeeID = &EmpIDVar

Pour les valeurs de chaînes de caractères, cela ressemblera à :

DEFINE EmpIDVar = '1234';

SELECT *
FROM Employees
WHERE EmployeeID = '&EmpIDVar'

0 votes

Vérifié, cela fonctionne dans ORACLE SQL Developer version 20.2.0.175 Build 175.1842. Je l'ai testé avec ma table : define usr = 'BT'; select * from department where created_by = '&usr';

1voto

Ivan Gerasimenko Points 1617

Utilisez la requête suivante :

DECLARE 
  EmpIDVar INT;

BEGIN
  EmpIDVar := 1234;

  SELECT *
  FROM Employees
  WHERE EmployeeID = EmpIDVar;
END;

1 votes

L'erreur renvoyée "PLS-00428 une clause INTO est attendue dans cette instruction SELECT"

1voto

Md. Kamruzzaman Points 1763

Dans le développeur SQL, définissez les propriétés par défaut sur "ON". Si elles sont à "OFF" pour quelque raison que ce soit, suivez les étapes ci-dessous.

set define on; define batchNo='123'; update TABLE_NAME SET IND1 = 'Y', IND2 = 'Y' WHERE BATCH_NO = '&batchNo';

0 votes

C'est la réponse la plus facile qui a fonctionné pour moi. Merci.

0voto

Essayez ceci, cela fonctionnera, il est préférable de créer une procédure, si la procédure n'est pas possible, vous pouvez utiliser ce script.

avec param AS(
SELECT 1234 empid
FROM dual)
 SELECT *
  FROM Employees, param
  WHERE EmployeeID = param.empid;
END;

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