Dans SQL Server, nous pouvons utiliser ceci:
DECLARE @variable INT;
SELECT @variable= mycolumn from myTable;
Comment puis-je faire la même chose dans Oracle? J'essaye actuellement ce qui suit:
DECLARE COMPID VARCHAR2(20);
SELECT companyid INTO COMPID from app where appid='90' and rownum=1;
Pourquoi ce n'est pas fonctionne ?
DECLARE
the_variable NUMBER;
BEGIN
SELECT my_column INTO the_variable FROM my_table;
END;
Assurez-vous que la requête ne renvoie qu'une seule ligne:
Par défaut, une instruction SELECT INTO ne doit renvoyer qu'une seule ligne. Sinon, PL/SQL déclenche l'exception prédéfinie TOO_MANY_ROWS et les valeurs des variables dans la clause INTO ne sont pas définies. Assurez-vous que votre clause WHERE est suffisamment spécifique pour ne correspondre qu'à une seule ligne
Si aucune ligne n'est renvoyée, PL/SQL déclenche NO_DATA_FOUND. Vous pouvez vous protéger de cette exception en sélectionnant le résultat d'une fonction d'agrégation, telle que COUNT (*) ou AVG (), le cas échéant. Il est garanti que ces fonctions renvoient une seule valeur, même si aucune ligne ne correspond à la condition.
Une instruction SELECT ... BULK COLLECT INTO peut renvoyer plusieurs lignes. Vous devez configurer des variables de collection pour conserver les résultats. Vous pouvez déclarer des tableaux associatifs ou des tables imbriquées qui grossissent selon les besoins pour contenir l'ensemble des résultats.
Le curseur implicite SQL et ses attributs% NOTFOUND,% FOUND,% ROWCOUNT et% ISOPEN fournissent des informations sur l'exécution d'une instruction SELECT INTO.
Pas tout à fait sûr de ce que vous recherchez, mais en PL/SQL
DECLARE
v_variable INTEGER;
BEGIN
SELECT mycolumn
INTO v_variable
FROM myTable;
END;
Ollie.
Un point supplémentaire:
Lorsque vous convertissez de tsql
à plsql
, vous devez vous préoccuper de l'exception no_data_found
DECLARE
v_var NUMBER;
BEGIN
SELECT clmn INTO v_var FROM tbl;
Exception when no_data_found then v_var := null; --what ever handle the exception.
END;
Dans tsql
si no data found
alors la variable sera null
mais pas exception
ORA-01422: l'extraction exacte renvoie plus que le nombre de lignes demandé
si vous ne spécifiez pas l'enregistrement exact à l'aide de la condition where, vous obtiendrez l'exception ci-dessus.
DECLARE
ID NUMBER;
BEGIN
select eid into id from employee where salary=26500;
DBMS_OUTPUT.PUT_LINE(ID);
END;
Pour stocker une sortie d'une seule ligne dans une variable de la requête select into:
déclarer le v_username varchare (20); SELECT le nom d'utilisateur dans le v_username FROM utilisateurs WHERE id_utilisateur = '7';
cela stockera la valeur d'un seul enregistrement dans la variable v_username.
Pour stocker plusieurs lignes dans une variable de la requête select into:
vous devez utiliser la fonction listagg. listagg concatène les lignes résultantes d'une colonne en une seule colonne et, pour les différencier, vous pouvez utiliser un symbole spécial. utilisez la requête ci-dessous SELECT listagg (nom d'utilisateur || ',') dans le groupe (ordre par nom d'utilisateur) dans v_username FROM users;