J'ai le code suivant:
DECLARE
v_hire_date DATE:='30-Oct-2000';
v_six_years BOOLEAN;
BEGIN
IF MONTHS_BETWEEN(SYSDATE,v_fecha_contrato)/12 > 6 THEN
v_six_years:=TRUE;
ELSE
v_six_years:=FALSE;
END IF;
DBMS_OUTPUT.PUT_LINE('flag '||v_six_years);
END;
Je veux imprimer la valeur de la variable v_six_years
, mais je reçois l'erreur:
ORA-06550: line 10, column 24:
PLS-00306: wrong number or types of arguments in call to '||'
ORA-06550: line 10, column 3
Comment imprimer la valeur de la variable v_six_years
?
Il semble que vous ne puissiez pas concatérer varchar
et boolean
.
Définissez cette fonction:
FUNCTION BOOLEAN_TO_CHAR(FLAG IN BOOLEAN)
RETURN VARCHAR2 IS
BEGIN
RETURN
CASE FLAG
WHEN TRUE THEN 'TRUE'
WHEN FALSE THEN 'FALSE'
ELSE 'NULL'
END;
END;
et utilisez-le comme ceci:
DBMS_OUTPUT.PUT_LINE('flag '|| BOOLEAN_TO_CHAR(v_six_years));
Vous pouvez utiliser ci-dessous pour imprimer la valeur booléenne dans PLSQL
dbms_output.put_line('v_six_years '|| sys.diutil.bool_to_int(v_six_years));
dbms_output.put_line
n'est pas surchargé pour accepter un argument booléen. Une réponse simple d'une ligne serait
dbms_output.put_line (cas où v_six_years = true puis 'true' sinon 'false' end);
PL/SQL n'a pas de littéral pour représenter les valeurs booléennes. Vous devrez soit convertir la valeur booléenne v_six_years en une chaîne, soit ne pas utiliser de booléen si vous souhaitez imprimer la valeur. Les booléens PL/SQL sont parfaits pour la logique mais inutiles si vous souhaitez afficher la valeur.
DECLARE
v_hire_date DATE:='30-Oct-2000';
v_six_years VARCHAR2(1);
BEGIN
IF MONTHS_BETWEEN(SYSDATE,v_fecha_contrato)/12 > 6 THEN
v_six_years:='1';
ELSE
v_six_years:='0';
END IF;
DBMS_OUTPUT.PUT_LINE('flag '||v_six_years);
END;
Ou
DECLARE
v_hire_date DATE:='30-Oct-2000';
v_six_years BOOLEAN;
v_six_years_display VARCHAR2(5);
BEGIN
IF MONTHS_BETWEEN(SYSDATE,v_fecha_contrato)/12 > 6 THEN
v_six_years:=TRUE;
v_six_years_display := 'true';
ELSE
v_six_years:=FALSE;
v_six_years_display := 'false';
END IF;
DBMS_OUTPUT.PUT_LINE('flag '||v_six_years_display);
END;
Vous pouvez imprimer le contenu d'une variable en utilisant le \echo
méta-commande. De man psql
:
Pour récupérer le contenu de la variable, faites précéder le nom de deux points, par exemple:
testdb=> \echo :foo bar