2017-05-24 4 views

Répondre

1

Vous capturez la sortie en utilisant une clause INTO et envelopper le SELECT dans un FOREACH. Cela récupère une ligne de données à la fois et vous avez besoin de variables séparées pour chaque colonne que vous sélectionnez. Vous pouvez ensuite les manipuler dans une chaîne plus grande.

Vous pouvez ensuite utiliser SYSTEM.

Toutefois, la sortie de echo sera envoyée à /dev/null (ou NUL:). Si c'est ce que vous voulez, d'accord, mais pourquoi? Sinon, vous devrez organiser la redirection vers un autre endroit pour vous-même.

CREATE PROCEDURE echo(str VARCHAR(200) DEFAULT 'hello world'); 
    DEFINE cmd VARCHAR(255); 
    LET cmd = "echo " || str || " >>/Users/jleffler/tmp/arcana.out"; 
    SYSTEM cmd; 
END PROCEDURE; 
EXECUTE PROCEDURE echo(); 
EXECUTE PROCEDURE echo("The world is your oyster"); 
DROP PROCEDURE echo; 

Vous devrez ajuster le nom du fichier en fonction de vos besoins - les chances sont élevées que vous n'avez pas mon répertoire personnel sur votre machine.

Exemple de fichier de sortie:

hello world 
The world is your oyster 

autorisations sur fichiers et répertoires menant au fichier:

  2 drwxr-xr-x  root wheel 2017-05-24 17:17:16/
    169236 drwxr-xr-x  root admin 2016-09-20 12:46:37 /Users 
    609973 drwxr-xr-x jleffler staff 2017-05-24 17:18:45 /Users/jleffler 
    1670154 drwxr-xr-x jleffler staff 2017-05-24 17:19:02 /Users/jleffler/tmp 
    63140467 -rw-r--r-- jleffler staff 2017-05-24 17:19:02 /Users/jleffler/tmp/arcana.out 
0

d'accord avec tout Leffler mentionné ci-dessus @ Jonathan. Voici un autre exemple où l'instruction select the renvoie une seule valeur entière similaire à celle que vous avez montrée dans votre question.

create procedure test(); 
DEFINE my_data int; 
LET my_data = (select count(*) from systables); 
system 'echo ' || my_data || ' > /tmp/my_data'; 
end procedure; 
execute procedure test(); 

Dans mon système de test, la sortie de l'instruction select

select count(*) from systables; 

    (count(*)) 
     113 

1 row(s) retrieved. 

Lorsque j'exécute la procédure, le résultat de l'instruction du système est le fichier/tmp/my_data.

cat /tmp/my_data 
113 

En bref, il est certainement possible de réaliser ce que vous cherchez à faire. Cependant, en fonction du jeu de résultats de l'instruction select, vous aurez peut-être besoin d'une manipulation plus complexe à l'intérieur de la procédure stockée.