Paramètre de transfert varchar2 Dans la procédure plsql de l'opérateur Select

Exécution de l'opérateur suivant dans Oracle Toad


exec plsql_procedure/select 'somestring' from dual/;


trhows Exception suivante:

ORA-06550: ligne 1, conférencier 33:
PLS-00103: Face au symbole "SELECT", En attente de l'une des opérations suivantes:

/ / - + case mod NOUVEL NONSENSE null

La procédure prend un paramètre VARCHAR2. Comment cela peut-il être corrigé?
Invité:

Hannah

Confirmation de:

Si votre utilisation select from dual Ce n'est pas simplement un exemple de autre chose, laissez ce choix.


exec plsql_procedure/'somestring'/;


Sinon, sélectionnez la variable et transférez-la à la procédure.


declare
my_var table_name.column_name%Type;
begin

select column_name
into my_var
from table_name
where ...;

plsql_procedure/parameter_name => my_var/;

end;
/

Felix

Confirmation de:

J'ai essayé plusieurs approches. Ceux-ci inclus:


exec plsql_procedure//select 'somestring' from dual//;

EXECUTE IMMEDIATE /'testProc/'''||/SELECT 'Testing' FROM dual/||'''/'/;

EXECUTE IMMEDIATE /'EXEC testProc/'''||/SELECT 'Testing' FROM dual/||'''/'/;


Rien de répertorié n'a pas fonctionné. Il paraît que Oracle En aucun cas admet l'approbation
SELECT

dans la liste des arguments.

Une chose que j'ai faite est sauvée le résultat de la demande
SELECT

Dans la variable et l'utilisée plus tard comme suit:


CREATE OR REPLACE PROCEDURE testProc /
testVar IN VARCHAR2 -- Proc accepts VARCHAR2
/ IS
BEGIN
dbms_output.put_line/testVar/;
END;
/

SET SERVEROUTPUT ON
DECLARE
testVarIn VARCHAR/2000/; -- Declare the variable
BEGIN
SELECT 'Testing' INTO testVarIn FROM dual;
-- Accept its value using SELECT ... INTO

testProc/testVarIn/; -- Use the variable value to pass to the proc
END;
/


Sortir

:


PROCEDURE testProc compiled
anonymous block completed
Testing


Quand rien ne se passe, nous devons vivre avec des alternatives. Notre objectif ultime - Juste effectuer des travaux. Peu importe ce que nous faisons pour cela.

Charles

Confirmation de:

Cela est possible pour les fonctions, mais pas pour les procédures. Notez que
select

doit être plongée entre crochets, donc un double support dans select en dessous de.


create or replace function foo /x varchar2/ return integer is
begin
--Do various stuff;
return 1;
end;
/

select foo//select 'somestring' from dual// from dual;

Damien

Confirmation de:

Il convient de garder à l'esprit que la demande relationnelle ne renvoie pas VALUE - Il retourne TABLE. Même si nous pouvons savoir en raison du contexte /Par exemple, sélectionner la valeur littérale de DUAL/, Ce qui est concret SELECT ne retournera qu'une seule ligne, la base de données ne sait pas et suppose que SELECT Renvoyez une table avec plusieurs lignes. Même SELECT 1 de DUAL Table de retour - Cette table a une colonne et une ligne, mais c'est la même table. :-/

Partager et profiter.

Pour répondre aux questions, connectez-vous ou registre