Comment utiliser des 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. Cela semble être une chose très simple à faire, mais je ne trouve pas de solution simple. Comment puis-je le faire?

J’utilise le SQL-Developer dans la version 3.2. Les autres trucs ne fonctionnaient pas pour moi, mais cela a fait:

 define value1 = 'sysdate' SELECT &&value1 from dual; 

C’est aussi la voie la plus lisse présentée ici, pour le moment.

(Si vous omettez la partie “define”, vous serez invité à saisir cette valeur)

Il existe deux types de variables dans SQL-plus: la substitution et la liaison.

Ceci est une substitution (les variables de substitution peuvent remplacer les options de commande SQL * Plus ou un autre texte codé en dur):

 define a = 1; select &a from dual; undefine a; 

Ceci est lié (les variables de liaison stockent les valeurs de données pour les instructions SQL et PL / SQL exécutées dans le SGBDR; elles peuvent contenir des valeurs uniques ou des ensembles de résultats complets):

 var x number; exec :x := 10; select :x from dual; exec select count(*) into :x from dual; exec print x; 

SQL Developer prend en charge les variables de substitution, mais lorsque vous exécutez une requête avec la syntaxe bind :var vous êtes invité à fournir la liaison (dans une boîte de dialog).

Référence:

Les variables de substitution UPDATE sont un peu difficiles à utiliser, regardez:

 define phone = '+38097666666'; select &phone from dual; -- plus is ssortingped as it is number )) select '&phone' from dual; -- plus is preserved as it is ssortingng 

Dans SQL * Plus, vous pouvez faire quelque chose de très similaire

 SQL> variable v_emp_id number; SQL> select 1234 into :v_emp_id from dual; 1234 ---------- 1234 SQL> select * 2 from emp 3 where empno = :v_emp_id; no rows selected 

Dans SQL Developer, si vous exécutez une instruction contenant un nombre quelconque de variables de liaison (préfixées par un signe deux-points), vous serez invité à entrer des valeurs. Comme Alex le fait remarquer, vous pouvez également faire quelque chose de similaire en utilisant la fonction “Run Script” (F5) avec la syntaxe EXEC alternative proposée par Alex.

 variable v_count number; variable v_emp_id number; exec :v_emp_id := 1234; exec select count(1) into :v_count from emp; select * from emp where empno = :v_emp_id exec print :v_count; 

Réponse simple NO.

Cependant, vous pouvez obtenir quelque chose de similaire en exécutant la version suivante en utilisant des variables de liaison:

 SELECT * FROM Employees WHERE EmployeeID = :EmpIDVar 

Une fois que vous exécutez la requête ci-dessus dans SQL Developer, vous êtes invité à entrer la valeur de la variable bindID EmployeeID.

Ok je le sais un peu d’un hack mais c’est une façon d’utiliser une variable dans une simple requête pas un script:

 WITH emplVar AS (SELECT 1234 AS id FROM dual) SELECT * FROM employees, emplVar WHERE EmployId=emplVar.id; 

Vous pouvez le lancer partout.

Vous pouvez lire ailleurs sur les variables de substitution; ils sont très pratiques dans SQL Developer. Mais j’ai tout fait pour essayer d’utiliser des variables de liaison dans SQL Developer. C’est ce que je fais:

 SET SERVEROUTPUT ON declare v_testnum number; v_testssortingng varchar2(1000); begin v_testnum := 2; DBMS_OUTPUT.put_line('v_testnum is now ' || v_testnum); SELECT 36,'hello world' INTO v_testnum, v_testssortingng from dual; DBMS_OUTPUT.put_line('v_testnum is now ' || v_testnum); DBMS_OUTPUT.put_line('v_testssortingng is ' || v_testssortingng); end; 

SET SERVEROUTPUT ON permet d’imprimer le texte sur la console de sortie du script.

Je crois que ce que nous faisons ici s’appelle officiellement PL / SQL. Nous avons quitté le terrain SQL pur et utilisons un moteur différent dans Oracle. Vous voyez le SELECT ci-dessus? En PL / SQL, vous devez toujours SELECT ... INTO soit variable ou un refcursor. Vous ne pouvez pas simplement sélectionner et retourner un jeu de résultats en PL / SQL.

Utilisez la requête suivante:

 DECLARE EmpIDVar INT; BEGIN EmpIDVar := 1234; SELECT * FROM Employees WHERE EmployeeID = EmpIDVar; END; 

Essayez ceci cela fonctionnera, il vaut mieux créer une procédure, si la procédure n’est pas possible, vous pouvez utiliser ce script.

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