Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2988 connectés 

  FORUM HardWare.fr
  Programmation

  [SQL/Oracle]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL/Oracle]

n°34132
BENB
100% Lux.
Posté le 23-05-2001 à 16:49:58  profilanswer
 

j'ai une requete SQL
UPDATE curious SET numb = numb-1 WHERE numb = 1 RETURNING name,numb INTO :name,:numb
 
que dois-je obtenir dans name et numb
la table est definie comme suit :
CREATE TABLE curious(name CHAR(25), numb NUMBER)

mood
Publicité
Posté le 23-05-2001 à 16:49:58  profilanswer
 

n°34141
ddr555
Posté le 23-05-2001 à 17:01:25  profilanswer
 

C'est la première fois que je vois returning dans une requête ...
mais c'est stupide, vaux mieux mettre set numb = 0 where numb = 1
ou alors y'a une erreur dans la requête

n°34144
BENB
100% Lux.
Posté le 23-05-2001 à 17:09:29  profilanswer
 

ddr555 a écrit a écrit :

C'est la première fois que je vois returning dans une requête ...
mais c'est stupide, vaux mieux mettre set numb = 0 where numb = 1
ou alors y'a une erreur dans la requête




Je suis tout a fait d'accord, en fait je me fous de cette partie je ne m'interresse qu'a la partie returning...into...
 
cette requete est un test et a l'origine c'etait numb = :entry
et pour simplifier.... enfin voila...
 
Mais merci quand meme

n°34148
ddr555
Posté le 23-05-2001 à 17:16:50  profilanswer
 

je dirai que ça a des chances de ne pas marcher, mais bon ..., ça n'engage que moi. normalement, je dirai plutôt que dans le where il y a la clé de la table, donc pas la peine de la sélectionner dans returning. si c'est pour mettre à jour plusieurs lignes, je pense pas que ça marchera, il me semble que le sql ne prend pas en charge les tableaux.

n°34152
BENB
100% Lux.
Posté le 23-05-2001 à 17:21:39  profilanswer
 

Je m'explique :D
je ne cherches pas a ce que ca marche !
Je cherche a faire les API qui vont le faire marcher...
Il faut donc que comprenne comment ca marche...
 
Oracle me dit qu'il y a sept lignes (il y en a sept dans ma table), prends deux adresses pour me renvoyer des valeurs et ne m'en renvoie qu'une... je ne comprend rien  
 
voir http://forum.hardware.fr/sqlforum/ [...] ache=cache

n°34156
ddr555
Posté le 23-05-2001 à 17:27:55  profilanswer
 

ben oui, les variables ne sont pas des tableaux, c'est pour cela qu'il n'y a qu'une seule valeur. c'est à partir de quel langage que tu veux faire ça ???

n°34158
BENB
100% Lux.
Posté le 23-05-2001 à 17:31:04  profilanswer
 

C/C++ et OCI...
 
dans la doc ils font une allocation dynamique...
moi j'ai que une valeur pour name et des valuers fausses pour numb....

n°34159
zejeanmi
Posté le 23-05-2001 à 17:31:59  profilanswer
 

En direct de la doc oracle :
(langage PL/SQL - ce n'est pas du SQL) :
 
Use the RETURNING Clause
 
Often, applications need information about the row affected by a SQL operation, for example, to generate a report or take a subsequent action. The INSERT, UPDATE, and DELETE
statements can include a RETURNING clause, which returns column values from the affected row into PL/SQL variables or host variables. This eliminates the need to SELECT the row after
an insert or update, or before a delete. As a result, fewer network round trips, less server CPU time, fewer cursors, and less server memory are required.  
 
In the following example, you update the salary of an employee and at the same time retrieve the employee's name and new salary into PL/SQL variables.  
 
PROCEDURE update_salary (emp_id NUMBER) IS
   name    VARCHAR2(15);
   new_sal NUMBER;
BEGIN
   UPDATE emp SET sal = sal * 1.1
      WHERE empno = emp_id
      RETURNING ename, sal INTO name, new_sal;
 
================================
donc tu dois récupérer 0 et non 1 comme valeur dans :numb

n°34161
BENB
100% Lux.
Posté le 23-05-2001 à 17:33:54  profilanswer
 

zejeanmi a écrit a écrit :

En direct de la doc oracle :
(langage PL/SQL - ce n'est pas du SQL) :
 
Use the RETURNING Clause
 
Often, applications need information about the row affected by a SQL operation, for example, to generate a report or take a subsequent action. The INSERT, UPDATE, and DELETE
statements can include a RETURNING clause, which returns column values from the affected row into PL/SQL variables or host variables. This eliminates the need to SELECT the row after
an insert or update, or before a delete. As a result, fewer network round trips, less server CPU time, fewer cursors, and less server memory are required.  
 
In the following example, you update the salary of an employee and at the same time retrieve the employee's name and new salary into PL/SQL variables.  
 
PROCEDURE update_salary (emp_id NUMBER) IS
   name    VARCHAR2(15);
   new_sal NUMBER;
BEGIN
   UPDATE emp SET sal = sal * 1.1
      WHERE empno = emp_id
      RETURNING ename, sal INTO name, new_sal;
 
================================
donc tu dois récupérer 0 et non 1 comme valeur dans :numb




J'ai plutot 489526774135, c'est normal ?

n°34162
ddr555
Posté le 23-05-2001 à 17:36:06  profilanswer
 

doit y'avoir des problèmes dans le passage des paramètres.
ne vaut t-il pas mieux passer par un curseur ???
en pro*C on peut le faire en  sélectionnant dans un tableau, mais en sql, les tableaux ...

mood
Publicité
Posté le 23-05-2001 à 17:36:06  profilanswer
 

n°34163
BENB
100% Lux.
Posté le 23-05-2001 à 17:37:38  profilanswer
 

ddr555 a écrit a écrit :

doit y'avoir des problèmes dans le passage des paramètres.
ne vaut t-il pas mieux passer par un curseur ???
en pro*C on peut le faire en  sélectionnant dans un tableau, mais en sql, les tableaux ...




C'est un test pour une API, dans la realite je ne connais pas la requete...

n°34164
zejeanmi
Posté le 23-05-2001 à 17:46:12  profilanswer
 

en fait j'ai peut être (sûrement) mal compris
 
UPDATE curious SET numb = numb-1 WHERE numb = 1 RETURNING name,numb INTO name,numb
marche comme je l'ai dis (on obtient bien 0)
 
par contre
UPDATE curious SET numb = numb-1 WHERE numb = 1 RETURNING name,numb INTO :name,:numb
non, car :name et :numb sont des variables de lien
(j'en sais pas plus pour l'instant)

n°34169
ddr555
Posté le 23-05-2001 à 18:32:54  profilanswer
 

mais ce code là est dans une prod stock ??? si ça retourne rien, c'est normal, il faut passer les arguments en IN OUT dans l'appel de la procédure.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [SQL/Oracle]

 

Sujets relatifs
[Oracle] Binding[SQL] [access] problème avec requête sur un champ de type date
[ORACLE] Récupérer un modèle de données.SQL
MAJ dans une BD Access / SQL server[Oracle] Connection!!!
[SQL Server] Mapping nvarchar, nchar , ntext <-----> java.lang.Stringun truc comme like en SQL ...
Insertion d'une image en SQL / OracleORACLE - PL/SQL
Plus de sujets relatifs à : [SQL/Oracle]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR