La commande de raccourci est NEW_V.
Exemple:
SQL> col instance_name NEW_V inst_name SQL> select instance_name from v$instance; INSTANCE_NAME ---------------- orcl11 SQL> select instance_number from v$instance where instance_name='&inst_name'; old 1: select instance_number from v$instance where instance_name='&inst_name' new 1: select instance_number from v$instance where instance_name='orcl11' INSTANCE_NUMBER --------------- 1
Si la requête retourne plusieurs lignes alors c'est la dernière valeur qui sera sauvergardée dans la variable:
SQL> col table_name NEW_V t_name SQL> select table_name from user_tables where rownum<=3; TABLE_NAME ------------------------------ ICOL$ CON$ UNDO$ SQL> prompt &t_name UNDO$
ce qui n'est pas trop connu, c'est new_value avec no rows selected.
RépondreSupprimerSQL> col x new_v x
SQL> def x
SP2-0135: symbol x is UNDEFINED
SQL> select 1 x from dual where 1=0;
no rows selected
SQL> def x
DEFINE X = "" (CHAR)
Avec la condition 1=0, la valeur de x est quand même initialisée à null.
C'est assez génial comme technique pour les paramètres "optionels"
ex: script x.sql
set ver off termout off pages 50000
col null new_v 1
select null from dual where 1=0;
set termout on
select username, account_status from dba_users where username='&1' or '&1' is null;
Après, tu peux appeler le script sans paramètre sans que sqlplus ne réclame pour Enter value for 1:
Ex:
$ sqlplus -s / as sysdba @x SYSTEM
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
SYSTEM OPEN
$ sqlplus -s / as sysdba @x
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
SCOTT OPEN
ORACLE_OCM EXPIRED & LOCKED
DIP EXPIRED & LOCKED
DBSNMP OPEN
CTXSYS OPEN
WMSYS EXPIRED & LOCKED
APPQOSSYS EXPIRED & LOCKED
SYS OPEN
SYSTEM OPEN
OUTLN EXPIRED & LOCKED
Effectivement ça peut s'avérer utile.
RépondreSupprimermerci Laurent