programmera.net -> oracle -> normal för utskrift | info@programmera.net |
Variabler i SQL*Plus
1. Variabler i SQL*Plus 2. Skapa variabler med & 3. accept 4. Skapa variabler med && 5. define 6. set define 7. 8. |
1. Variabler i SQL*Plus
På denna sida beskrivs hur du använder variabler i SQL*Plus. Variabler är särskilt användbara om du har ett script med kod som du vill köra många gånger och inte vill gå in och ändra i scriptet varje gång.
2. Skapa variabler med &
I Oracle kan det ibland vara bekvämt att kunna skapa variabler. Man gör detta genom att sätta ett & framför en sträng. När SQL*Plus tolkar satsen dyker en prompt upp där du ska fylla värdet för variablen. Se exempel:
Vi ser att man med hjälp av variabler kan köra samma SQL-sats om igen och få olika resultat utan att behöva ändra själva satsen. Fnuttarna i SQL-satsen kommer sig av att datatypen för ename är VARCHAR2. Om vi har en variabel av t.ex. NUMBER behövs inga fnuttar:
SQL> SELECT * FROM emp WHERE ename='&name';
Ange värdet för name: SCOTT
gammal 1: select * from emp where ename='&name'
ny 1: select * from emp where ename='SCOTT'
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
7788 SCOTT ANALYST 7566 1987-04-19 3000
SQL> /
Ange värdet för name: KING
gammal 1: select * from emp where ename='&name'
ny 1: select * from emp where ename='KING'
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
7839 KING PRESIDENT 1981-11-17 5000
SQL> SELECT ename, deptno FROM emp WHERE deptno=&dep;
Ange värdet för dep: 30
gammal 1: SELECT ename, deptno FROM emp WHERE deptno=&dep
ny 1: SELECT ename, deptno FROM emp WHERE deptno=30
ENAME DEPTNO
---------- ----------
ALLEN 30
WARD 30
MARTIN 30
BLAKE 30
TURNER 30
JAMES 30
6 rader.
3. accept
Om man skriver ett script kanske man vill att utskriften av frågan ska vara lite snyggare, då kan man använda accept. Vi skapar skriptet get_emp.sql:
Vi testar scriptet:
-- This script ask for input with accept
accept var_name prompt 'Type the name of the employee:'
SELECT * FROM emp WHERE ename='&var_name';
SQL> @get_emp;
Type the name of the employee:TURNER
gammal 1: SELECT * FROM emp WHERE ename='&var_name'
ny 1: SELECT * FROM emp WHERE ename='TURNER'
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
7844 TURNER SALESMAN 7698 1981-09-08 1500 0
4. Skapa variabler med &&
Med dubbla och-tecken (&&) får man en variabel som minns det senaste värdet man skrev in. Vi testar detta:
Än så länge är allt som vanligt. Men vad händer om vi nu skriver en ny SELECT-sats och använder samma variabelnamn var_dep som ovan:
SQL> SELECT * FROM emp WHERE deptno=&&var_dep AND sal > &&var_minsal;
Ange värdet för var_dep: 10
Ange värdet för var_minsal: 2000
gammal 1: SELECT * FROM emp WHERE deptno=&&var_dep AND sal > &&var_minsal
ny 1: SELECT * FROM emp WHERE deptno=10 AND sal > 2000
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ---------
7782 CLARK MANAGER 7839 1981-06-09 2450 10
7839 KING PRESIDENT 1981-11-17 5000 10
Vi ser att variabeln var_dep behåller sitt värde.
SQL> SELECT ename, job, sal FROM emp WHERE deptno=&&var_dep;
gammal 1: SELECT ename, job, sal FROM emp WHERE deptno=&&var_dep
ny 1: SELECT ename, job, sal FROM emp WHERE deptno=10
ENAME JOB SAL
---------- --------- ----------
CLARK MANAGER 2450
KING PRESIDENT 5000
MILLER CLERK 1300
5. define
Ett annat sätt att få en variabel att minnas sitt värde är att sätta värdet med define. Vi skapar först ett script get_emp_row.sql:
Nu när vi anropar scriptet kan vi sätta variabeln med define:
-- This script contains a variable
SELECT * FROM emp WHERE ename='&var_name';
Vi behövde inte skriva in något värde för variabeln var_name.
SQL> define var_name=SCOTT
SQL> @get_emp_row
gammal 1: SELECT * FROM emp WHERE ename='&var_name'
ny 1: SELECT * FROM emp WHERE ename='SCOTT'
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
7788 SCOTT ANALYST 7566 1987-04-19 3000
6. set define
Om man vill använda ampersand (&) till något annat i sina strängar, går det bra att definiera något annat tecken som variabelmarkör. Detta gör man med set define:
I exemplet ovan använder vi $ som variabelmarkör, men för att det inte ska bil så förvirrande återgår vi till ampersand:
SQL> set define $
SQL> SELECT * FROM emp WHERE ename='$name';
Ange värdet för name: BLAKE
gammal 1: SELECT * FROM emp WHERE ename='$name'
ny 1: SELECT * FROM emp WHERE ename='BLAKE'
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
7698 BLAKE MANAGER 7839 1981-05-01 2850
SQL> set define &