Je souhaite écrire du code réutilisable et dois déclarer certaines variables au début et les réutiliser dans le script, telles que:
DEFINE stupidvar = 'stupidvarcontent';
SELECT stupiddata
FROM stupidtable
WHERE stupidcolumn = &stupidvar;
Comment puis-je déclarer une variable et la réutiliser dans les instructions qui suivent, par exemple en l'utilisant SQLDeveloper.
Tentatives
- Utilisez une section DECLARE et insérez l'instruction SELECT suivante dans
BEGIN
etEND;
. Accède à la variable en utilisant&stupidvar
. - Utilisez le mot-clé
DEFINE
et accédez à la variable. - En utilisant le mot-clé
VARIABLE
et accédez à la variable.
Mais j'obtiens toutes sortes d'erreurs lors de mes essais (variable non liée, erreur de syntaxe, attendue SELECT INTO
...).
sql
oracle
variables
declaration
bl4ckb0l7
la source
la source
Réponses:
Il existe plusieurs façons de déclarer des variables dans les scripts SQL * Plus.
La première consiste à utiliser VAR, pour déclarer une variable de liaison. Le mécanisme d'attribution de valeurs à un VAR est avec un appel EXEC:
Un VAR est particulièrement utile lorsque nous voulons appeler une procédure stockée qui a des paramètres OUT ou une fonction.
Nous pouvons également utiliser des variables de substitution. Ceux-ci sont bons pour le mode interactif:
Lorsque nous écrivons un script qui appelle d'autres scripts, il peut être utile de DÉFINIR les variables à l'avance. Cet extrait de code s'exécute sans me demander de saisir une valeur:
Enfin, il y a le bloc PL / SQL anonyme. Comme vous le voyez, nous pouvons toujours attribuer des valeurs aux variables déclarées de manière interactive:
la source
Essayez d'utiliser des guillemets doubles s'il s'agit d'une variable char:
ou
upd:
la source
ORA-01008: not all variables bound
.DEFINE num = 1; SELECT &num FROM dual;
mène à:ORA-01008: not all variables bound
Dans PL / SQL v.10
Le mot-clé declare est utilisé pour déclarer une variable
pour attribuer une valeur, vous pouvez la définir lorsque vous déclarez
ou pour sélectionner quelque chose dans cette variable, vous utilisez l'
INTO
instruction, mais vous devez encapsuler l'instruction dansBEGIN
etEND
, vous devez également vous assurer qu'une seule valeur est renvoyée, et n'oubliez pas les points-virgules.donc la déclaration complète serait publiée comme suit:
Votre variable n'est utilisable que dedans
BEGIN
etEND
donc si vous voulez en utiliser plusieurs, vous devrez faire plusieursBEGIN END
wrappingsJ'espère que cela vous fera gagner du temps
la source
Si vous souhaitez déclarer la date, puis l'utiliser dans SQL Developer.
la source
Je veux juste ajouter la réponse de Matas . C'est peut-être évident, mais j'ai cherché pendant longtemps pour comprendre que la variable n'est accessible que dans la construction BEGIN-END , donc si vous devez l'utiliser dans un code plus tard, vous devez mettre ce code dans BEGIN -END bloc .
Notez que ces blocs peuvent être imbriqués :
la source
La question est sur le point d'utiliser une variable dans un script signifie pour moi qu'elle sera utilisée dans SQL * Plus.
Le problème est que vous avez manqué les citations et Oracle ne peut pas analyser la valeur en nombre.
Cet exemple fonctionne très bien en raison de la conversion automatique de type (ou peu importe son nom).
Si vous vérifiez en tapant DEFINE dans SQL * Plus, cela montrera que la variable num est CHAR.
Ce n'est pas un problème dans ce cas, car Oracle peut gérer l'analyse de chaîne en nombre s'il s'agit d'un nombre valide.
Lorsque la chaîne ne peut pas analyser en nombre, Oracle ne peut pas y faire face.
Avec un devis, alors ne forcez pas Oracle à analyser le nombre, tout ira bien:
Donc, pour répondre à la question d'origine, il devrait être fait comme cet exemple:
Il existe un autre moyen de stocker une variable dans SQL * Plus à l'aide de la valeur de colonne de requête .
Le COL [UMN] a l' option new_value pour stocker la valeur de la requête par nom de champ.
Comme vous pouvez le voir, la valeur X.log a été définie dans la variable stupid_var , nous pouvons donc trouver un fichier X.log dans le répertoire actuel contenant un journal.
la source
Voici votre réponse:
la source
Dans Toad, j'utilise cela fonctionne:
Ensuite, la valeur sera imprimée dans
DBMS Output
Window.Référence à ici et ici 2 .
la source
Parfois, vous devez utiliser une variable macro sans demander à l'utilisateur de saisir une valeur. Le plus souvent, cela doit être fait avec des paramètres de script facultatifs. Le code suivant est entièrement fonctionnel
Un code similaire a été trouvé dans le répertoire rdbms / sql.
la source
Une approche possible, si vous avez juste besoin de spécifier un paramètre une fois et de le répliquer à plusieurs endroits, consiste à faire quelque chose comme ceci:
Ce code génère une chaîne de 8 chiffres aléatoires.
Notez que je crée une sorte d'alias nommé
str_size
qui contient la constante8
. Il est croisé pour être utilisé plus d'une fois dans la requête.la source